求写一函数判断两点是否在曲线同一侧
(defun curve-pt-side (entcurve pt1 pt2))
如果是同一侧返回T
求解啊!!!
(defun curvesidep (curve p1 p2 / a b)
(setq a (vlax-curve-getclosestpointto curve p1)
b (vlax-curve-getclosestpointto curve p2)
)
(not (inters a b p1 p2 ) )
)
;;;测试
(defun c:tt(/ curve p1 p2)
(while (not (setq curve (car (entsel "\n**选择曲线:")))))
(while (not (setq p1 (getpoint "\n 第一点:"))))
(while (not (setq p2 (getpoint "\n 第二点:"))))
(if (curvesidep curve p1 p2)
(princ "\n两点在曲线同侧.")
(princ "\n两点在曲线两侧.")
)
(princ)
)
Gu_xl 发表于 2012-2-26 21:42 static/image/common/back.gif
顾版程序不完全正确,拿此图形一试便知。曲线选spline,两点选直线的端点。
本帖最后由 caoyin 于 2012-2-27 01:40 编辑
参考:
http://space.mjtd.com/blog-213172-306.html
(lt:curve-getDistancePtTo ENTCURVE PT1)
(lt:curve-getDistancePtTo ENTCURVE PT2)
以上2者返回,如果同为正值或同为负值则表明2点在曲线的同一侧,反之则在不同侧
多谢各位高手的热心回答! 本帖最后由 Gu_xl 于 2012-2-27 19:06 编辑
cabinsummer 发表于 2012-2-26 22:57 static/image/common/back.gif
顾版程序不完全正确,拿此图形一试便知。曲线选spline,两点选直线的端点。
修改了下,再测试下这个!
;;;判断两点是否曲线同侧
(defun curvesidep(curve p1 p2 / a a1 b b1 a2 b2)
(cond ((equal p1
(setq a (vlax-curve-getclosestpointto curve p1))
1e-6
) ;_ p1在曲线上的最近点
nil
)
((equal p2
(setq b (vlax-curve-getclosestpointto curve p2))
1e-6
) ;_ p2在曲线上的最近点
nil
)
(t
(setq a1 (mapcar '+
a
(vlax-curve-getFirstDeriv
curve
(vlax-curve-getParamAtPoint curve a)
)
) ;_ p1在曲线上最近点的切线方向点
ang1 (+ (* 0.5 pi) (angle a a1)) ;_ p1在曲线上最近点的法线方向
a2 (inters a a1 p1 (polar p1 ang1 1) nil) ;_ p1在曲线上的垂足点
b1 (mapcar '+
b
(vlax-curve-getFirstDeriv
curve
(vlax-curve-getParamAtPoint curve b)
)
) ;_ p2在曲线上最近点的切线方向点
ang2 (+ (* 0.5 pi) (angle b b1)) ;_ p2在曲线上最近点的法线方向
b2 (inters b b1 p2 (polar p2 ang2 1) nil) ;_ p2在曲线上的最近点
)
(if (> ang1 (* pi 2))
(setq ang1 (- ang1 pi pi))
)
(if (> ang2 (* pi 2))
(setq ang2 (- ang2 pi pi))
)
(equal (equal ang1 (angle a2 p1) 1e-6)
(equal ang2 (angle b2 p2) 1e-6)
)
)
)
)
Gu_xl 发表于 2012-2-27 16:39 static/image/common/back.gif
修改了下,再测试下这个!
谢谢版主,借用了。 版主威武
页:
[1]