明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 吟屏

求LWPOLYLINE线之间的最小距离

  [复制链接]
 楼主| 发表于 2002-12-25 17:47:00 | 显示全部楼层

还有大师有别的方法吗?

是闭合的多条PL线。
发表于 2002-12-26 08:15:00 | 显示全部楼层

闭合的问题解决了,多谢提点

(defun C:distPL(/ End_param PL_length precision point1 point2 minDistance
                  pointonPL1 pointonPL2 curDistance oldosmode PLobj1 PLobj2)
  (setq oldosmode (getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (setq PLobj1 (vlax-ename->vla-object (car (entsel "\nSelect first PLine: ")))
        PLobj2 (vlax-ename->vla-object (car (entsel "\nSelect second PLine: "))))
  (setq        End_param (vlax-curve-getendparam PLobj1)
        PL_length (vlax-curve-getDistAtParam PLobj1 End_param))
  (princ "\nLength of PL1 is ")(princ PL_length)
  (setq precision (getreal "\nPrecision <1.0>: "))
  (if (= precision nil)(setq precision 1.0))
  (setq dist 0)
  (setq point1 (vlax-curve-getPointAtDist PLobj1 dist)
        point2 (vlax-curve-getClosestPointTo PLobj2 point1)
        minDistance (distance point1 point2)
  )
  (while (<= (setq dist (+ dist precision)) PL_length)
    (setq pointonPL1 (vlax-curve-getPointAtDist PLobj1 dist)
          pointonPL2 (vlax-curve-getClosestPointTo PLobj2 pointonPL1)
          curDistance (distance pointonPL1 pointonPL2)
    )
    (if (< curDistance minDistance)
        (setq minDistance curDistance
              point1 pointonPL1
              point2 pointonPL2)
    )
  )
  (command "line" point1 point2 "")
  (princ "\nMinimum distance is ")
  (princ minDistance)
  (vlax-release-object PLobj1)
  (vlax-release-object PLobj2)
  (setvar "OSMODE" oldosmode)
  (princ)
)
 楼主| 发表于 2002-12-30 16:20:00 | 显示全部楼层

此方法不够精确。很难在程序中控制步长。

本帖最后由 作者 于 2002-12-30 16:20:42 编辑

如图所示,程序中不管步长多少始终不能求出最小线距。

本帖子中包含更多资源

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

x
 楼主| 发表于 2002-12-30 16:26:00 | 显示全部楼层

怎样求ARC之间的距离?

Alin提供了一方法,但不够精确,我试图求线与线之间的距离,但ARC之间距离无成下手。大师可有时间解答。
发表于 2002-12-30 16:52:00 | 显示全部楼层

这是最小线距吗?

本帖最后由 作者 于 2002-12-30 16:52:36 编辑

从图上看,你所标的不是最小线距处。
 楼主| 发表于 2002-12-30 17:42:00 | 显示全部楼层

是啊这是Alin给的程序求出的结果。

发表于 2002-12-30 19:26:00 | 显示全部楼层

圆心与圆心连线,如圆弧与连线相交,则两交点距离为最小距离,如...

如某一圆弧不相交,则计算起点及终点到另一圆弧圆心的连线与另一圆弧的交点的距离,就这样算下下去,如算到最后都不相交的话,就只有起点、终点之间的边线中最短的一段距离了。
发表于 2002-12-30 19:32:00 | 显示全部楼层

我试过多次也没问题


这两条封闭的PL线的长度均为1979.1,精度我设为1.0,费时不到一秒。
当然不能说精度已符合要求,但至少不如你图中所示的离谱。
搜索有许多优化方法,例如你可以先以大步长搜索,再局部用小步长来。
至于如何决定精度。那是由题目的要求、PL线的绝对长度和机器的性能决定。
我也想知道还有没有更好的方法,陈老师您说呢?

本帖子中包含更多资源

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

x
发表于 2002-12-31 09:08:00 | 显示全部楼层

注意:

本帖最后由 作者 于 2002-12-31 9:08:13 编辑

斑竹的意见基本正确,但注意一点:斑竹说"圆心与圆心连线,如圆弧与连线相交,则两交点距离为最小距离"。这一点不太正确。我会上传一个特例。完整的做法应该是:
1、先判断两弧所在的圆是否相交,若不相交,则按斑竹的意见做。
2、若相交,还是按斑竹意见做,但斑竹说的第一步就不考虑了。
发表于 2002-12-31 09:24:00 | 显示全部楼层

特例:

否定“圆心与圆心连线,如圆弧与连线相交,则两交点距离为最小距离”的特例:。另外,任意两实体求交点的子程序我提供给你,,这是用ARX编的,lsp程序可调用,函数名为(ent_inter_ent ent1 ent2 0),ent1和ent2为实体名。如两实体相交没有交点,则返回nil。下载后先加载该程序,然后调用。

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-5-31 19:23 , Processed in 0.196768 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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