找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4172|回复: 15

[求助] 如何判断点是否在两个平行线中间

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2016-5-4 12:19:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如图,有什么好的方法判断测试点是否在 P1 P2连线垂线组成的两个平行线之间呢?

搜狗截图20160504120747.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 264个

财富等级: 日进斗金

发表于 2016-5-4 12:34:56 来自手机 | 显示全部楼层
trans出car来判断

点评

如何TRANS 判断?  详情 回复 发表于 2016-5-4 13:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2016-5-4 12:47:23 来自手机 | 显示全部楼层
还可以转换为判断点在矩形内部

点评

不一定有框,点在两条平行线中间都算。  详情 回复 发表于 2016-5-4 13:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-5-4 12:59:54 | 显示全部楼层
两平行距离D,点P到两条平行线的距离是否都小于D
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2016-5-4 13:16:45 | 显示全部楼层
iLisp 发表于 2016-5-4 12:47
还可以转换为判断点在矩形内部

不一定有框,点在两条平行线中间都算。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2016-5-4 13:20:32 | 显示全部楼层
iLisp 发表于 2016-5-4 12:34
trans出car来判断

如何TRANS 判断?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-5-4 13:37:11 | 显示全部楼层
marting 发表于 2016-5-4 13:20
如何TRANS 判断?

  1. (defun f (p p1 p2 p3 p4 / l1 l2)
  2.   (if (inters p1 p3 p2 p4)
  3.     (mapcar 'set '(p3 p4) (list p4 p3))
  4.   )
  5.   (setq        l1 (trans (mapcar '- p p1) 0 (mapcar '- p2 p1))
  6.         l2 (trans (mapcar '- p p3) 0 (mapcar '- p4 p3))
  7.   )
  8.   (if (or (minusp (last l1))
  9.           (minusp (last l2))
  10.           (> (last l1) (distance p1 p2))
  11.           (> (last l2) (distance p3 p4))
  12.           (> (* (car l1) (car l2)) 0)
  13.       )
  14.     nil
  15.     t
  16.   )
  17. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-5-4 14:59:36 | 显示全部楼层
其实从数学上,向量的点集是判断点和直线位置关系的最简明的方法

点在两直线中间,测试点和P1,P2的两个点积的乘积必小于0.

下面是测试函数, 纯LISP的点积函数本论坛有。下面的点积函数用的XDRX API里面的。
  1. (defun XD::Pnt:IsBetween (pnt p1 p2)
  2.    (setq vx (mapcar '- p2 p1)
  3.          v1 (mapcar '- pnt p1)
  4.          v2 (mapcar '- pnt p2)
  5.    )
  6.    (< (* (xdrx_vector_dotproduct v1 vx)
  7.          (xdrx_vector_dotproduct v2 vx)
  8.       ) 0
  9.    )
  10. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-5-4 15:12:30 | 显示全部楼层
找到个老黄的纯LISP代码的点积函数帖子,http://bbs.xdcad.net/thread-677302-1-1.html
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-5-4 15:19:18 | 显示全部楼层
试过 AcGe 库中的 OrthoProject Project,还有 acedTrans , 都没有 包装的 autolisp 这个 trans 函数丰富好用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2016-5-9 20:46:54 | 显示全部楼层
本帖最后由 牢固 于 2016-5-9 21:02 编辑

  1. (defun c:tt ()
  2.   (if (and
  3.   (setq p1 (getpoint "\n第一点:"))
  4.   (setq p2 (getpoint p1 "\n第二点:"))
  5.   (setq p3 (getpoint p1 "\n平行线上点:"))
  6.       )
  7.     (while (setq p0 (getpoint "\n测试点:"))
  8.       (if (< (* (car (trans (mapcar '- p0 p1) 1 (mapcar '- p2 p1)))
  9.     (car (trans (mapcar '- p0 p3) 1 (mapcar '- p2 p1)))
  10.     )
  11.        0
  12.        )
  13.   (princ "\n点位于平行线之间")
  14.   (princ "\n点位于平行线之外")
  15.   )
  16.     )
  17.   )
  18.   (princ)
  19. )

评分

参与人数 1D豆 +10 收起 理由
XDSoft + 10 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

发表于 2016-5-9 22:23:05 | 显示全部楼层
我提出一个判别方法:
如果这个点在两平行线AB,CD中间,那么它在平行方向的线应该与AD或者BC相交。否则交于AD或者BC的延长线上。以后补写一段代码。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

发表于 2016-5-9 22:33:14 | 显示全部楼层
  1. (defun c:tt ()
  2.   (if (and
  3.     (setq p1 (getpoint "\n第一点:"))
  4.     (setq p2 (getpoint p1 "\n第二点:"))
  5.     (setq p3 (getpoint p1 "\n平行线上点:"))
  6.       )
  7.     (progn
  8.       (setq an (angle p1 p3))
  9.       (while (setq p0 (getpoint "\n测试点:"))
  10.     (if (or (inters p1 p2 p0 (polar p0 an -1e20))
  11.         (inters p1 p2 p0 (polar p0 an 1e20))
  12.             )
  13.       (princ "\n点位于平行线之间")
  14.       (princ "\n点位于平行线之外")
  15.     )
  16.       )
  17.     )
  18.   )
  19.   (princ)
  20. )



点评

代码有点小错误,红色部分,已修改!  详情 回复 发表于 2016-5-10 21:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2016-5-10 21:17:05 | 显示全部楼层

代码有点小错误,红色部分,已修改!
(defun c:tt ()
  (if (and
    (setq p1 (getpoint "\n第一点:"))
    (setq p2 (getpoint p1 "\n第二点:"))
    (setq p3 (getpoint p1 "\n平行线上点:"))
      )
    (progn
      (setq an (angle p1 p2))
      (while (setq p0 (getpoint "\n测试点:"))
    (if (or (inters p1 p3 p0 (polar p0 an -1e20))
        (inters p1 p3 p0 (polar p0 an 1e20))
            )
      (princ "\n点位于平行线之间")
      (princ "\n点位于平行线之外")
    )
      )
    )
  )
  (princ)
)

点评

我的理解错误。 我把你的那几个点P2,P3理解反了  详情 回复 发表于 2016-5-10 23:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

发表于 2016-5-10 23:30:45 | 显示全部楼层
牢固 发表于 2016-5-10 21:17
代码有点小错误,红色部分,已修改!
(defun c:tt ()
  (if (and

我的理解错误。
我把你的那几个点P2,P3理解反了

点评

呵呵,一般选点都是先选一条直线上点!  详情 回复 发表于 2016-5-11 11:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-28 06:40 , Processed in 0.480601 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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