找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 591|回复: 4

[求助] [求助]:取两条3维多义线间最小距离 (不一定在端点上)

[复制链接]
发表于 2004-6-10 17:30:23 | 显示全部楼层 |阅读模式

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

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

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

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-6-11 00:50:48 | 显示全部楼层
最初由 netbee 发布
[B]多用论坛的[搜索]功能
http://www.xdcad.net/forum/showt ... d=752106#post752106
[url]http://www.xdcad.net/forum/showthread.php?s=&postid=95794#post95794[/url... [/B]


每次中点来回,应该有把中点给跨过去了.
比如前一个中点距离为2,下一个中点为3,那么两个点之间的就不求了.
你可以画一个圆弧和一直线试试.


其实就圆弧和直线的情况,一直用"垂线最短",设个精度就可以.

复杂实体,其实也是直线和圆弧的情况.

下面求直线或圆(弧)的最近点.
[php]
(defun c:tt( /  dis dis-min e1 e2 fuzz pt pt-e1 pt-e2 yes)
(princ "\n选直线或圆弧: ")
(setq e1(car(entsel))
       e2(car(entsel))
)
(setq pt-e1(vlax-curve-getstartpoint e1))
(setq pt-e2  (vlax-curve-getClosestPointTo e2 pt-e1 )
       dis-min(distance pt-e1 pt-e2)
       yes t
       fuzz 1e-6
)
(while yes
   (setq pt(vlax-curve-getClosestPointTo e1 pt-e2))
   (if(or(> (setq dis(distance pt pt-e2))dis-min)(equal dis dis-min fuzz))
      (setq yes nil)
      (setq pt-e1 pt dis-min dis)
   )
   (setq pt(vlax-curve-getClosestPointTo e2 pt-e1))
   (if(or(> (setq dis(distance pt pt-e1))dis-min)(equal dis dis-min fuzz))
      (setq yes nil)
      (setq pt-e2 pt dis-min dis )
   )
)
(command "line" pt-e1 pt-e2 "")
)
[/php]


上面是距离小到不能再小,就是最近距离

下面是如果线1上的一点,和经过线2,反射回线1的点,两点"在一起"了,反射点和这一点就是最近点.(如果有交点就是求交点)
[php]
(defun c:tt( /  dis dis-min e1 e2 fuzz pt pt-e1 pt-e2 yes)
(princ "\n选直线或圆弧: ")
(setq e1(car(entsel))
       e2(car(entsel))
)
(setq pt-e1(vlax-curve-getstartpoint e1))
(setq pt-e2  (vlax-curve-getClosestPointTo e2 pt-e1)
       fuzz 1e-4
)
(while(not(equal (setq pt(vlax-curve-getClosestPointTo e1 pt-e2))pt-e1 fuzz))
        (setq pt-e1 pt
              pt-e2(vlax-curve-getClosestPointTo e2 pt-e1)
        )
)      
(command "line" pt-e1 pt-e2 "")
)
[/php]

上面这对于凸线和直线应该都对,这理论我自创^_^,有不同意见的画个图出来.
acad的复杂实体的每一片断,应该都是凸线,或直线.

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

使用道具 举报

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-6-11 23:52:13 | 显示全部楼层
最初由 陌生人 发布
[B]测试有点问题,如果有弧线先选弧线的话,有时候返回的不是最近距离 [/B]

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 05:31 , Processed in 0.175777 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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