求救:算法:已知...
已知两个AcDb2dPolyline线,求它们之间的最近距离;请各位高手帮忙:)
:(
有点太难了,第一想到的是用扫描线,没再深想下去,你的问题没点别的限制了吗,把问题的背景说一说,也许有办法,或者是我太笨了 :)呵呵:我已经想出来了,只是一个算法而已
1:首先计算了2个AcDb2dPolyline实体(特点:每一个实体只有2个顶点,在此,我称之为单位实体)之间的最小距离,这是很容易可以做到的。2:2个普通的AcDb2dPolyline实体(不限制顶点数目)之间的最小距离,肯定落在2个单位实体之间。
3:普通实体是由单位实体组成,用一个2重循环就可以求的最小值了;
算法与程序见内
本帖最后由 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();
对啊
是我想得太复杂了,呵呵呵......如果求解答案在可知的范围之内,穷举就能很简单地做出来.
严重错误
你还没有判断相交的情况 <p>在高等数学里有个坐标转换,</p><p>不知用雅克比行列式相关的知识加上求极值的方法能否可行</p>
页:
[1]