判断点是否在多边形内有两种数学方法(可以在网上查一下). 这里有个lisp的函数,可以改为VBA的: (defun PT_InOrOut ( pt_list pt / rt n i j va va_count) (setq i 0 va_count 0 rt nil ) (setq n (length pt_list)) (repeat (- n 1) (setq va (- (angle pt (nth i pt_list)) (angle pt (nth (+ 1 i) pt_list)))) (cond ((> va pi)(setq va (- va pi))) ((< va (* -1 pi))(setq va (+ va pi))) );cond (setq va_count (+ va_count va)) (setq i (1+ i)) ) (setq va (- (angle pt (nth i pt_list)) (angle pt (nth 0 pt_list)))) (cond ((> va pi) (setq va (- va pi))) ((< va (* -1 pi)) (setq va (+ va pi))) );cond (setq va_count (+ va_count va)) ; (setq rt "ON") (if (< (abs (- (abs va_count) pi)) 0.000001) (setq rt "IN") ;'t (setq rt "OUT") ;'nil );if rt ) 3种返回值: "IN" "ON" "OUT" |