明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2309|回复: 6

求救:算法:已知...

[复制链接]
发表于 2002-5-23 10:30:00 | 显示全部楼层 |阅读模式
已知两个AcDb2dPolyline线,求它们之间的最近距离;
请各位高手帮忙:)
发表于 2002-5-24 08:38:00 | 显示全部楼层

:(

有点太难了,第一想到的是用扫描线,没再深想下去,你的问题没点别的限制了吗,把问题的背景说一说,也许有办法,或者是我太笨了 :)
 楼主| 发表于 2002-5-25 15:39:00 | 显示全部楼层

呵呵:我已经想出来了,只是一个算法而已

1:首先计算了2个AcDb2dPolyline实体(特点:每一个实体只有2个顶点,在此,我称之为单位实体)之间的最小距离,这是很容易可以做到的。
2:2个普通的AcDb2dPolyline实体(不限制顶点数目)之间的最小距离,肯定落在2个单位实体之间。
3:普通实体是由单位实体组成,用一个2重循环就可以求的最小值了;
发表于 2002-5-25 22:49:00 | 显示全部楼层

算法与程序见内

本帖最后由 wxj351 于 2002-5-25 22:49:24 编辑

AcGePoint3d pt11,pt12,pt21,pt22,pt31,pt32;

        AcDbLine* pLine1;       
        AcDbLine* pLine2;       

        //用户选择直线1       
        pLine1=selEnt();                       
        pt11=pLine1->startPoint();
        pt12=pLine1->endPoint();

        //用户选择直线2       
        pLine2=selEnt();               
        pt21=pLine2->startPoint();
        pt22=pLine2->endPoint();

        //直线3,新建一个与直线2平行且过直线1的起点
        AcDbLine* pClone = AcDbLine::cast(pLine2->clone());
        AcGeMatrix3d matClone;
        matClone.setCoordSystem(
                AcGePoint3d(pt11.x-pt21.x,pt11.y-pt21.y,pt11.z-pt21.z),
                AcGeVector3d(1,0,0),
                AcGeVector3d(0,1,0),
                AcGeVector3d(0,0,1));
        pClone -> transformBy(matClone);

        pt31=pClone->startPoint();
        pt32=pClone->endPoint();

        //用直线1,直线3建立一个平面
        AcGePlane *pPlane =new AcGePlane(pt11,pt12,pt32);

        //求得直线21与平面的距离,即空间异面直线的最短距离
        acutPrintf("\n%f",pPlane->signedDistanceTo(pt21));

        pLine1->unhighlight();
        pLine2->unhighlight();
       
        pLine1->close();
        pLine2->close();
        pClone->close();
发表于 2002-5-26 11:50:00 | 显示全部楼层

对啊

是我想得太复杂了,呵呵呵......

    如果求解答案在可知的范围之内,穷举就能很简单地做出来.
发表于 2002-7-29 09:29:00 | 显示全部楼层

严重错误

你还没有判断相交的情况
发表于 2009-1-22 22:40:00 | 显示全部楼层

在高等数学里有个坐标转换,

不知用雅克比行列式相关的知识加上求极值的方法能否可行

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

本版积分规则

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

GMT+8, 2024-11-25 14:48 , Processed in 0.174384 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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