找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1250|回复: 17

[求助] [求助]:如何判断一点在PLINE的哪一侧?

[复制链接]
发表于 2004-9-4 20:58:40 | 显示全部楼层 |阅读模式

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

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

×
该多义线没有与自己交叉。也没有回头。如何用LISP判断一点位于其左侧还是右侧?(假设该点在多义线的长度范围内)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-9-4 21:17:49 | 显示全部楼层
用该点与线的垂足方向以及垂足两侧极近点的方向来比较
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-4 21:58:22 | 显示全部楼层
不错,思路很好。但是怎么获得这个“极近点”呢?如果这个垂足点刚好在一断直线上呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-9-6 06:42:27 | 显示全部楼层
第二点是左侧,第一点是右侧,测试过的。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-8 07:47:38 | 显示全部楼层
有高人能编个示例吗?这个程序很有用的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-8 21:07:05 | 显示全部楼层
第二点,自己改。。。。。。。。。。。


(defun T-offset()
(setq s (ssget  "X"  '((-4 . "<OR")
              (0 . "LWPOLYLINE")
              (0 . "POLYLINE")
              (-4 . "OR>")
             )
         )
    )
             (setq P(sslength s) q 20)
             (setq N 0 )
             (setq p (- p 1))
             (while (<= n p)
             (setq nam(ssname s n)
                  de(cdr (assoc 10(entget nam)))  );第一点
             (command "offset"q nam  de"")
             (setq n (+ n 1))))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-8 22:46:10 | 显示全部楼层
谢谢。楼上的程序没看太明白(没调试),不过倒给我一个启示。可以过该点作PL的垂线得出垂直距离,然后OFFSET 这个PLINE,往左边偏一次(距离为已求出),然后判断该点是否在PL上,在的话该点就在PL的左侧,否则就在右侧。我说的对不对?
不过这样的话就太麻烦了,得写不短的代码。

再请问一下4楼的高人,这是个什么函数,好象没见过。能直接判断点的位置吗,肯请指点一下它的功能和用法,好吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-8 22:55:43 | 显示全部楼层
这种方法是否欠妥?比较麻烦,能有更好的方法吗
想CAD中的OFFSET在使用时可能也存在左右判断的问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-8 23:01:27 | 显示全部楼层
是啊, 我想知道四楼说的是个什么函数?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1915个

财富等级: 堆金积玉

发表于 2004-9-9 09:03:43 | 显示全部楼层
先简化成判断点在line的那一侧,利用极坐标,见下图:直线ab和点c,以直线的起点作为坐标系的中心
分两种情况
当α>180时,β>α,点在直线的右侧
当α<180时,β<α,点在直线的右侧
大家看看这种方法行不行
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-9 13:42:43 | 显示全部楼层
楼主的左右是如何定义的?是以图面为参照,还是以多义线的顺逆时针为参照?
说明:以图面为参照会产生多义性,因为有些情况,不知道算是左边还是右边。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-1-6 21:58:00 | 显示全部楼层
我传了一个图上来。如下:“1”为AB曲线的左侧,“2”为AB曲线的右侧,如何判断PT1在AB线的左侧还是右侧呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-7 08:38:01 | 显示全部楼层
判断点在直线上的位置,可以参考一下
   
[php]
(defun pntonline(p1 p2 p3 / p c B C P)
  (setq p p3)

  (apply '+ (mapcar '(lambda (b)
    (setq c(- (* (car p) (cadr b)) (* (cadr p) (car b))) p b )c )
    (list p1 p2 p3)))
)

[/php]
功能

判断点在直线上的位置

参数

p1,p2:直线上的两点,例如直线上的起点和端点

p3:所要判断的点

返回值

点的位置,等于0时(equal k 0.0 0.00000001)点在线上,

大于0时点在线的左侧,小于0时点在线的右侧

示例

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

使用道具 举报

 楼主| 发表于 2005-1-7 21:01:33 | 显示全部楼层
楼上所说不知道对这个问题有用吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 19:23 , Processed in 0.207660 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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