转帖,也许对你有用。 判断一点是否在多边形内 ;;By Xiao_longxin 明经通道 ;;有一不规则多边形由点a1(x1,y1)、a2(x2,y2).....an(xn,yn)依次连接而成,如何求证点p(x,y)是在多边形内还是多边形外? ;;将直线PAi记作ki.将ki旋转到ki+1(令kn+1=k1)的角记为βi(规定逆时针为正,顺时针为负,如果βi大于180就变成βi-360)。 ;;从直观上看有下面的结论 ;;若P在形内,诸β的代数和为360度; ;;若P在形外,诸β的代数和为0。 ;;pt_list 为((x y z) (x y z)......(x y z))即围成多边形的表 ;;pt 为要判断的点 ;;自相交多边形适用,不适用于曲线 (defun inorout (pt_list pt / e1 n i j va va_count) (setq i 0 va_count 0 n (length pt_list) pt_list (append pt_list (list (car pt_list))) ) (repeat n (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))) ) (setq va_count (+ va_count va) i (1+ i) ) ) (if (< (abs (- (abs va_count) pi)) 0.000001) 't 'nil ) ) |