opencascade计算点到特征线的距离应该注意的问题
来源:互联网 发布:手机端更改头像 js 编辑:程序博客网 时间:2024/06/01 10:10
经常会遇到要求点到曲线的距离的问题,在运用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;
}
}
}
输出结果:
最后有个非常关键的问题:
这里计算出了一系列的最短距离,开始看到一个函数
IsMin就让容易让人想到判断是不是就是最短距离的,
其实不是,这个类估计是分段计算最短距离的,
结果保存的是每一段中得到的最短距离,因此,每一个都是最短距离
非常值得注意的是:
1.计算到底哪个是最短距离 需要后续处理,这个非常关键,容易搞错。
2.给定任意的一个点,经常会出现,找不到最短距离的点,因此这种情况需要特殊处理。
- opencascade计算点到特征线的距离应该注意的问题
- opencascade 计算点与TopoDS_Shape中各个点的距离
- 计算点到线段的最近距离
- 计算点到直线的距离
- js计算点到原点的距离
- 如何计算点到线段的距离
- 计算空间点到直线的距离
- 计算点到直线的距离
- 点到平面的距离计算
- orbslam特征点的计算和描述子的计算,汉明距离匹配
- 使用向量的方法计算点到直线的距离
- 如何计算点到线段的最近距离
- 点到直线的垂直交点坐标 和 距离计算
- vtk基础编程(1)计算点到直线的距离
- CSU 1503: 点到圆弧的距离(计算几何)
- 计算点到SVM超平面的距离
- 使用CGAL AABBTree计算点到obj模型的距离
- 计算几何 点到线段的距离 点在简单多边形内 点到凸多边形的距离
- HTTP结构-WEB服务器
- 数字的输出
- 460 A. Vasya and Socks
- cocos2d-x的lua脚本如何获得Cocostudio中UI控件的对象
- 使用3.0实现微信打飞机——5.添加子弹及管理器
- opencascade计算点到特征线的距离应该注意的问题
- CentOS 6.5升级GCC 4.9.1
- AFNetworking速成教程
- 常见查找方法总结
- [Unity-11] Unity截屏方法
- Kconfig与Kbuild Makefile 的驱动方向简单解析
- unity3d 一句话问题
- jquery select获取选中的值和文本
- 使用3.0实现微信打飞机——6.碰撞检测