【源码】【免币】判断点是否在两点连线内或两点连线的延长线上
本帖最后由 kele99kele 于 2015-9-15 23:33 编辑;判断点是否在两点连线的延长线上(defun N::IsOnExLine (p1 p2 px)
(and
(< (abs (- (abs (- (distance px p1) (distance px p2))) (distance p1 p2))) 0.001)
(< (abs (- (angle p1 px) (angle p2 px))) 0.0001)
)
);判断点是否在两点连线上(defun N::IsOnLine (p1 p2 px)
(and
(< (abs (- (+ (distance p1 px) (distance p2 px)) (distance p1 p2))) 0.001)
(or
(< (abs (- (angle p1 px) (angle px p2))) 0.0001)
(< (abs (- (angle p2 px) (angle px p1))) 0.0001)
)
)
);判断点是否在两点连线上或连线的延长线上(defun N::IsInLine (p1 p2 px)
(or
(N::IsOnLine p1 p2 px)
(N::IsOnExLine p1 p2 px)
)
)给标注选择函数用的子函数,详http://bbs.mjtd.com/thread-169495-1-1.html,欢迎指着拍砖,不胜感激。 ;判断点是否在两点连线的延长线上
(defun N::IsOnExLine (p1 p2 px)
(< (abs (- (abs (- (distance px p1) (distance px p2))) (distance p1 p2))) 0.001)
)
;判断点是否在两点连线上
(defun N::IsOnLine (p1 p2 px)
(< (abs (- (+ (distance p1 px) (distance p2 px)) (distance p1 p2))) 0.001)
)
;判断点是否在两点连线上或连线的延长线上
(defun N::IsInLine (p1 p2 px)
(or
(N::IsOnLine p1 p2 px)
(N::IsOnExLine p1 p2 px)
)
)
角度判定好像可以不需要,实测没有角度判定也可以正确选择,从画法几何上来说距离判定就已经囊括了角度判定。欢迎拍砖。 曲线上?还是用acExtended吧。 如果不在,怎么移至两点连线之上呢? guankuiwu 发表于 2023-3-23 11:28
如果不在,怎么移至两点连线之上呢?
你这个问法不严谨,你是需要把点移动到两点连线的最近点,也就是点对直线的垂足处吗?还是只要移动到直线任意一点? Klein 发表于 2023-3-23 12:51
你这个问法不严谨,你是需要把点移动到两点连线的最近点,也就是点对直线的垂足处吗?还是只要移动到直线 ...
就是把点移动到两点连线的最近点 guankuiwu 发表于 2023-3-23 14:02
就是把点移动到两点连线的最近点
对算法研究的不多,但是提供一个比较直接的办法:
已知pt1、pt2以及需要判断的点ptx,先按楼上的办法判断ptx是不是在pt1和pt2连线的直线上,如果不在,求pt1和pt2两点的角度ang,然后用polar函数,起点ptx,角度按照ang+PI/2,长度任意给个值求得一个点pt3,再用inters函数就得到了你要的点了 本帖最后由 Klein 于 2023-3-23 14:21 编辑
guankuiwu 发表于 2023-3-23 14:02
就是把点移动到两点连线的最近点
想了一下,用这个方法甚至不需要判断点是不是在直线上,求得的点pt3如果和ptx完全相等或者两点距离近到一定程度可以认为ptx就在直线上了 学习了!我试试。多谢!
页:
[1]