明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1417|回复: 8

[源码] 【源码】【免币】判断点是否在两点连线内或两点连线的延长线上

[复制链接]
发表于 2015-9-15 17:33:42 | 显示全部楼层 |阅读模式
本帖最后由 kele99kele 于 2015-9-15 23:33 编辑

;判断点是否在两点连线的延长线上
  1. (defun N::IsOnExLine (p1 p2 px)
  2.   (and
  3.   (< (abs (- (abs (- (distance px p1) (distance px p2))) (distance p1 p2))) 0.001)
  4.   (< (abs (- (angle p1 px) (angle p2 px))) 0.0001)  
  5.   )
  6. )
;判断点是否在两点连线上
  1. (defun N::IsOnLine (p1 p2 px)
  2.   (and
  3.     (< (abs (- (+ (distance p1 px) (distance p2 px)) (distance p1 p2))) 0.001)
  4.     (or
  5.       (< (abs (- (angle p1 px) (angle px p2))) 0.0001)
  6.       (< (abs (- (angle p2 px) (angle px p1))) 0.0001)
  7.     )
  8.   )
  9. )
;判断点是否在两点连线上或连线的延长线上
  1. (defun N::IsInLine (p1 p2 px)
  2.   (or
  3.     (N::IsOnLine p1 p2 px)
  4.     (N::IsOnExLine p1 p2 px)
  5.   )
  6. )
给标注选择函数用的子函数,详http://bbs.mjtd.com/thread-169495-1-1.html,欢迎指着拍砖,不胜感激。
 楼主| 发表于 2015-9-15 22:41:58 | 显示全部楼层
;判断点是否在两点连线的延长线上
(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)
  )
)
角度判定好像可以不需要,实测没有角度判定也可以正确选择,从画法几何上来说距离判定就已经囊括了角度判定。欢迎拍砖。
发表于 2017-8-19 15:57:03 | 显示全部楼层
曲线上?还是用acExtended吧。
发表于 2023-3-23 11:28:38 | 显示全部楼层
如果不在,怎么移至两点连线之上呢?
发表于 2023-3-23 12:51:41 | 显示全部楼层
guankuiwu 发表于 2023-3-23 11:28
如果不在,怎么移至两点连线之上呢?

你这个问法不严谨,你是需要把点移动到两点连线的最近点,也就是点对直线的垂足处吗?还是只要移动到直线任意一点?
发表于 2023-3-23 14:02:47 | 显示全部楼层
Klein 发表于 2023-3-23 12:51
你这个问法不严谨,你是需要把点移动到两点连线的最近点,也就是点对直线的垂足处吗?还是只要移动到直线 ...

就是把点移动到两点连线的最近点
发表于 2023-3-23 14:15:45 | 显示全部楼层
guankuiwu 发表于 2023-3-23 14:02
就是把点移动到两点连线的最近点

对算法研究的不多,但是提供一个比较直接的办法:
已知pt1、pt2以及需要判断的点ptx,先按楼上的办法判断ptx是不是在pt1和pt2连线的直线上,如果不在,求pt1和pt2两点的角度ang,然后用polar函数,起点ptx,角度按照ang+PI/2,长度任意给个值求得一个点pt3,再用inters函数就得到了你要的点了
发表于 2023-3-23 14:19:33 | 显示全部楼层
本帖最后由 Klein 于 2023-3-23 14:21 编辑
guankuiwu 发表于 2023-3-23 14:02
就是把点移动到两点连线的最近点

想了一下,用这个方法甚至不需要判断点是不是在直线上,求得的点pt3如果和ptx完全相等或者两点距离近到一定程度可以认为ptx就在直线上了
发表于 2023-3-23 16:15:38 | 显示全部楼层
学习了!我试试。多谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-6 09:24 , Processed in 0.254598 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表