判断点在矩形内的函数已找到了,可是判断点在圆内的函数找不到,请高手指点,谢谢! 判断点在矩形内的函数: ;;;****************************************************************************** ;;; No.51 判断点是否在多边形内(狂刀程序) ;;;xPt是要判断的点坐标(x y z ), Points是多边形顶点列表((x1 y1 z1) (x2 y2 z2)...) ;;;http://zml84.blog.sohu.com/82505948.html ;;;****************************************************************************** ;;;测试 1:(ISPTINPM '(2 1) '((0 0)(10 0)(10 10))) ;;;测试2:(ISPTINPM (getpoint "要判断的点:") (list (getpoint "第一点:") (getpoint "第二点:") (getpoint "第三点:") (getpoint "第四点:")) ) (defun ISPTINPM (XPT POINTS) (equal pi (abs (apply '+ (mapcar '(lambda (X Y) (rem (- (angle XPT X) (angle XPT Y)) pi) ) (reverse (cdr (reverse (cons (last POINTS) POINTS))) ) POINTS ) ) ) 1e-6 ) ;end_equal ) ;;pt_list 为((x y z) (x y z)......(x y z))即围成多边形的表 ;;pt 为要判断的点 ;;自相交多边形适用,不适用于曲线 ;;例:(inorout (list (getpoint "第一点:") (getpoint "第二点:") (getpoint "第三点:") (getpoint "第四点:")) (getpoint "要判断的点:") ) ;;http://www.mjtd.com/Functions/ArticleShow.asp?ArticleID=1025 (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 ) )
|