找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3502|回复: 14

[求助]:两条曲线最近点的问题

[复制链接]
发表于 2002-11-23 08:39:43 | 显示全部楼层 |阅读模式

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

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

×
平面上有两条曲线,求得他们的最短距离,怎么知道是哪两点之间的距离,就是说,
怎么才能知道两条曲线上离得最近的两点的坐标?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-11-24 15:18:03 | 显示全部楼层
求最短的距离和求最近两点的坐标可以分开来求的。
能求得最短距离不一定需要最近2点的坐标。
我曾经做过求2条AcDb2dPolyline线之间的最近距离。并且在论坛上发表过,你可以找找:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-24 16:47:18 | 显示全部楼层
2条线之间的最短距离我知道怎么求得,我想知道是哪两个点之间的距离是最短距离,想知道点的坐标
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-24 19:08:19 | 显示全部楼层
最初由 fyje 发布
[B]2条线之间的最短距离我知道怎么求得,我想知道是哪两个点之间的距离是最短距离,想知道点的坐标 [/B]


ACAD下面实体的关于图形几何学的所有算法都在AcGe几何库里面提供了。


  1. [FONT=courier new]
  2. AcGeCurve3d::getClosestPointTo Function void

  3. getClosestPointTo(

  4. const AcGePoint3d& pnt,

  5. AcGePointOnCurve3d& pntOnCrv,

  6. const AcGeTol& tol = AcGeContext::gTol) const;

  7. pnt Input any 3D point
  8. pntOnCrv Output closest point on this curve to input point
  9. tol Input tolerance

  10. Finds the closest point on this curve to the input point. This function is the same as closestPointTo(), except that the closest point is returned as an AcGePointOnCurve3d object.


  11. --------------------------------------------------------------------------------
  12. [color=blue]  下面的方法是求两条几何3D曲线实体模型的最近点的方法

  13. void

  14. getClosestPointTo(

  15. const AcGeCurve3d& curve3d,

  16. AcGePointOnCurve3d& pntOnThisCrv,

  17. AcGePointOnCurve3d& pntOnOtherCrv,

  18. const AcGeTol& tol = AcGeContext::gTol) const;

  19. curve3d Input any 3D curve
  20. pntOnThisCrv Output closest point on this curve
  21. pntOnOtherCrv Output closest point on input curve
  22. tol Input tolerance

  23. Finds the closest points between this curve and the input curve. This function is the same as closestPointTo(), except the closest points are returned as AcGePointOnCurve3d objects.
  24. [/color]

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

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-24 23:04:20 | 显示全部楼层
最初由 xb4270293 发布
[B]我的体会是作两条Offset线求交点 [/B]


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

使用道具 举报

发表于 2002-11-25 21:42:26 | 显示全部楼层
第3贴说:2条线之间的最短距离我知道怎么求得,我想知道是哪两个点之间的距离是最短距离,想知道点的坐标。

如果已经知道了最短距离rD;

AcDbVoidPtrArray OffCurs;
AcDbCurve *pOffCur1, *pOffCur10, *pOffCur2, *pOffCur20;//四条偏置线

1、pCur1->getOffsetCurves(rD, OffCurs) ;
判断OffCurs.length() ?= 0
令pOffCur2 = (AcDbCurve *) OffCurs.at(0);//原曲线自相交时会出现多条偏置线,在此仅考虑第一条

2、分别考察四条偏置线的交点
if (pOffCur1->intersectWith(pOffCur2, AcDb::kOnBothOperands, GPts) == Acad::eOk && ..
对交点数组进行排序,确定最终的交点

3、求交点到原始实体的最近点,即可。
pCur1->getClosestPointTo(IntersectGPt, ResultGPt1);
pCur2->getClosestPointTo(IntersectGPt, ResultGPt2);

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

使用道具 举报

发表于 2002-11-26 14:55:50 | 显示全部楼层
fyje:你能不能给定一下曲线的类型,可以分别考虑一下,我觉得acdb2dpolyline线和spline线的处理方法是不一样的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-26 15:44:23 | 显示全部楼层
最初由 noname 发布
[B]fyje:你能不能给定一下曲线的类型,可以分别考虑一下,我觉得acdb2dpolyline线和spline线的处理方法是不一样的。 [/B]


其实,我的程序要解决的这两种类型的曲线都可能出现,你能否把这两种曲线的处理方法都解释一下呢?谢谢你。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-26 23:06:27 | 显示全部楼层

:)

对于acdb2dpolyline线:
step1:求得 单段曲线(只有2个顶点) 和 单段曲线 之间的最短距离,并且可以求得2个点的坐标;
step2:用 2 重循环可以 调用 step1 来求得 非单段曲线(多顶点) 和 非单段曲线之间的最短距离,并且可以确定在哪一段 单段曲线上。 确定了在哪一段上,那么也知道了2个点的坐标。
这个算法,我写过程序,请看下面的帖子:

  1. <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="650" id="AutoNumber1" height="498">
  2.   <tr>
  3.     <td width="100%" height="489">
  4.       <iframe name="I1" width="100%" height="100%" src="http://www.xdcad.net/forum/showthread.php?s=&threadid=6295&perpage=10&display=&pagenumber=1">
  5. 浏览器不支持嵌入式框架或配置为不显示嵌入式框架
  6.       </iframe>
  7.     </td>
  8.   </tr>
  9. </table>
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-27 08:47:16 | 显示全部楼层
我感觉晓东说的方法好实现一点,你的这个帖子我最先看到了,只是看了半天,不是十分清楚
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-10 16:00 , Processed in 0.431426 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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