rhegin 发表于 2008-2-13 00:58:00

如何判断一个点在区域中

VBA程序有没有类似于C语言中的PtInRegion的函数,我是用一个闭合多段线围成一个区域,然后我想判断一个点是否在这个区域中,应该如何才能做到这一点呢?

王咣生 发表于 2008-2-13 19:57:00

<p>判断点是否在多边形内有两种数学方法(可以在网上查一下).</p><p>这里有个lisp的函数,可以改为VBA的:</p><p>(defun PT_InOrOut ( pt_list pt / rt n i j va va_count)<br/>&nbsp; (setq&nbsp;i 0<br/>&nbsp;va_count 0<br/>&nbsp;rt nil<br/>&nbsp; )<br/>&nbsp; (setq n (length pt_list))<br/>&nbsp; (repeat (- n 1)<br/>&nbsp;&nbsp;&nbsp; (setq va (-&nbsp;(angle pt (nth i pt_list)) (angle pt (nth (+ 1 i) pt_list))))<br/>&nbsp;&nbsp;&nbsp; (cond<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((&gt; va pi)(setq va (- va pi)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((&lt; va (* -1 pi))(setq va (+ va pi)))<br/>&nbsp;&nbsp;&nbsp; );cond<br/>&nbsp;&nbsp;&nbsp; (setq va_count (+ va_count va))<br/>&nbsp;&nbsp;&nbsp; (setq i (1+ i))<br/>&nbsp; )<br/>&nbsp; (setq&nbsp;va (- (angle pt (nth i pt_list)) (angle pt (nth 0 pt_list))))<br/>&nbsp; (cond<br/>&nbsp;&nbsp;&nbsp; ((&gt; va pi) (setq va (- va pi)))<br/>&nbsp;&nbsp;&nbsp; ((&lt; va (* -1 pi)) (setq va (+ va pi)))<br/>&nbsp; );cond<br/>&nbsp; (setq va_count (+ va_count va))<br/>&nbsp; ;<br/>&nbsp; (setq rt "ON")<br/>&nbsp; (if (&lt; (abs (- (abs va_count) pi)) 0.000001)<br/>&nbsp;&nbsp;&nbsp; (setq rt "IN")&nbsp;;'t<br/>&nbsp;&nbsp;&nbsp; (setq rt "OUT")&nbsp;;'nil<br/>&nbsp; );if</p><p>&nbsp; rt<br/>)</p><p>3种返回值:</p><p>"IN"</p><p>"ON"</p><p>"OUT"</p><p></p>
页: [1]
查看完整版本: 如何判断一个点在区域中