码迷,mamicode.com
首页 > 其他好文 > 详细

opencascade计算点到特征线的距离应该注意的问题

时间:2014-08-21 17:18:34      阅读:338      评论:0      收藏:0      [点我收藏+]

标签:cad   opencascade   点到曲线的最短距离   

经常会遇到要求点到曲线的距离的问题,在运用opencascade计算点到曲线和曲面的距离常用的两个类是:

Extrema_ExtPC, Extrema_ExtPS


一般做法是先构造曲线特征:(构造了Wire拓扑边)

TopoDS_Wire w = BRepBuilderAPI_MakePolygon(
gp_Pnt(0,0,0),
gp_Pnt(10,0,0),
gp_Pnt(10,10,0),
gp_Pnt(0,10,0),Standard_True);


然后将其转化成曲线:
//create an adaptor curve
BRepAdaptor_CompCurve pseudoCurve(w);
//get the parameters
Standard_Real f = pseudoCurve.FirstParameter();
Standard_Real l = pseudoCurve.LastParameter();
//f = 0.0 ; l = 4.0

创建点,检验计算是否正确:
//create 2 points to project on the wire
gp_Pnt P1(5,0,0);
gp_Pnt P2(0,5,0);


gp_Pnt newP1,newP2;
Standard_Real newVal1,newVal2;
Extrema_ExtPC ext1(P1,pseudoCurve,f,l);
if ( ext1.IsDone() && ext1.NbExt() > 0 )
{
for ( Standard_Integer i = 1 ; i < ext1.NbExt() ; i++ )
{
if ( ext1.IsMin(i) )
{
newP1 = ext1.Point(i).Value();
cout << "points: " << newP1.X() << " " << newP1.Y() << " " << newP1.Z() << endl;
cout << "distance: " << sqrt((P1.X() - newP1.X() ) * (P1.X() - newP1.X() ) + (P1.Y() - newP1.Y() ) * (P1.Y() - newP1.Y() ) + (P1.Z() - newP1.Z() ) * (P1.Z() - newP1.Z() ) ) << endl;
//break;
}
}
}

输出结果:

bubuko.com,布布扣


最后有个非常关键的问题:

这里计算出了一系列的最短距离,开始看到一个函数

IsMin就让容易让人想到判断是不是就是最短距离的,

其实不是,这个类估计是分段计算最短距离的,

结果保存的是每一段中得到的最短距离,因此,每一个都是最短距离

计算到底哪个是最短距离 需要后续处理,这个非常关键,容易搞错。

opencascade计算点到特征线的距离应该注意的问题,布布扣,bubuko.com

opencascade计算点到特征线的距离应该注意的问题

标签:cad   opencascade   点到曲线的最短距离   

原文地址:http://blog.csdn.net/pizibing880909/article/details/38730593

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!