OpenCASCADE点向平面投影
OpenCASCADE点向平面投影
OpenCASCADE的ProjLib类提供了解析曲线(直线、圆、椭圆、抛物线、双曲线)向解析曲面(平面、圆柱面、圆锥面、球面、圆环面)投影的功能,主要用来计算三维曲线在二维参数空间的参数。

其中点向平面投影是最简单的情况,本文主要介绍点向平面投影的注意事项。ProjLib类是个工具类,因为其函数都是静态函数。点向平面投影很简单,直接用ProjLib::Project(aPlane, aPoint)即可。

其实现代码如下:
gp_Pnt2d ProjLib::Project(const gp_Pln& Pl, const gp_Pnt& P)
{
Standard_Real U, V;
ElSLib::Parameters(Pl, P, U, V);
return gp_Pnt2d(U,V);
} inline void ElSLib::Parameters(const gp_Pln& Pl,
const gp_Pnt& P,
Standard_Real& U,
Standard_Real& V) { ElSLib::PlaneParameters(Pl.Position(),P,U,V);
} void ElSLib::PlaneParameters (const gp_Ax3& Pos,
const gp_Pnt& P,
Standard_Real& U,
Standard_Real& V)
{
gp_Trsf T;
T.SetTransformation (Pos);
gp_Pnt Ploc = P.Transformed (T);
U = Ploc.X();
V = Ploc.Y();
}
从上面的代码可以看出,点向平面投影实现就是将点变换到平面所在的坐标系中。使用这个类向平面投影要注意的事项是平面的构造。平面gp_Pln有如下构造函数:

l 默认构造函数:构造了一个XOY平面
l 基于一个坐标系gp_Ax3构造平面
l 基于一个点和一个方向构造平面
l 基于平面的系数方程,即AX+BY+CZ+D=0
前两个构造函数很清晰,而第三个构造函数即基于一个点和一个方向构造平面的方式没有明确,注释不清晰。这里的方向指定了平面的法向,但是还缺少一个方向来确定一个坐标系,所以使用这个构造函数来生成平面的时候,需要理解其生成另外一个方向的算法是不是自己需要的。
gp_Pln::gp_Pln (const gp_Pnt& P,
const gp_Dir& V)
{
Standard_Real A = V.X();
Standard_Real B = V.Y();
Standard_Real C = V.Z();
Standard_Real Aabs = A;
if (Aabs < 0) Aabs = - Aabs;
Standard_Real Babs = B;
if (Babs < 0) Babs = - Babs;
Standard_Real Cabs = C;
if (Cabs < 0) Cabs = - Cabs; // pour determiner l'axe X :
// on dit que le produit scalaire Vx.V = 0.
// et on recherche le max(A,B,C) pour faire la division.
// l'une des coordonnees du vecteur est nulle. if( Babs <= Aabs && Babs <= Cabs) {
if (Aabs > Cabs) pos = gp_Ax3 (P, V, gp_Dir (-C,0., A));
else pos = gp_Ax3 (P, V, gp_Dir ( C,0.,-A));
}
else if( Aabs <= Babs && Aabs <= Cabs) {
if (Babs > Cabs) pos = gp_Ax3 (P, V, gp_Dir (0.,-C, B));
else pos = gp_Ax3 (P, V, gp_Dir (0., C,-B));
}
else {
if (Aabs > Babs) pos = gp_Ax3 (P, V, gp_Dir (-B, A,0.));
else pos = gp_Ax3 (P, V, gp_Dir ( B,-A,0.));
}
}
当这里确定平面坐标系的方式与需要的不一致时,在使用投影算法的时候就会产生问题。
OpenCASCADE点向平面投影的更多相关文章
- OpenCASCADE圆与平面求交
OpenCASCADE圆与平面求交 eryar@163.com 在 解析几何求交之圆与二次曲面中分析了OpenCASCADE提供的类IntAna_IntConicQuad可以用来计算圆与二次曲面之间的 ...
- OpenCASCADE直线与平面求交
OpenCASCADE直线与平面求交 在<解析几何>相关的书中都给出了直线和平面的一般方程和参数方程.其中直线的一般方程有点向式形式的. 由于过空间一点可作且只能作一条直线平行于已知直线, ...
- OpenCASCADE点向直线投影
OpenCASCADE点向直线投影 eryar@163.com 在GeomLib_Tool类中提供了计算指定点在曲线.曲面上的参数,这个算法具有通用性,即对任意曲线.曲面来反求点的参数. 本文主要结合 ...
- OpenCASCADE PCurve of Topological Face
OpenCASCADE PCurve of Topological Face eryar@163.com Abstract. OpenCASCADE provides a class BRepBuil ...
- OpenGL ES 2.0 摄像机与投影
1.摄像机的设置 摄像机的位置坐标 摄像机的位置 摄像机up方向 Matrix.setLookAtM( mVMatrix, //存储生成矩阵元素的float[]类型数组 0, //填充起始偏移量 cx ...
- vtkPlane和vtkPlaneSource
1.vtkPlane vtkPlane provides methods for various plane computations. These include projecting points ...
- FPS中受伤UI在VR游戏中的实现思路
FPS中受伤UI在VR游戏中的实现思路 希望实现的效果 这几天一直在尝试各种解决方案,现在算是不完美的解决啦,记录一下心路历程,思路有了算法都比较简单. V_1 玩家胶囊体指向的方向作为正方向,计算出 ...
- 什么是UV?
转自http://www.cnblogs.com/jenry/p/4083415.html 1.什么是UV? 对于三维模型,有两个最重要的坐标系统,一是顶点的位置(X,Y,Z)坐标,另一个就是UV ...
- 坐标系统与投影变换及在ArcGIS桌面产品中的应用
坐标系统与投影变换及在ArcGIS桌面产品中的应用 1.地球椭球体(Ellipsoid) 2.大地基准面(Geodetic datum) 3.投影坐标系统(Projected Coordinate S ...
随机推荐
- 利用已有库对excel进行读和写
读excel的内容:libxls库 C: https://github.com/evanmiller/libxls 或 http://libxls.sourceforge.net/ 参考博客:htt ...
- 【codeforces 794B】Cutting Carrot
[题目链接]:http://codeforces.com/contest/794/problem/B [题意] 给你一个等腰三角形; 它的底边为1; 高为h; 要求你把这个等腰三角形分成n份面积相等的 ...
- Springmvc Get请求Tomcat、WebLogic中文乱码问题
Springmvc Get请求Tomcat.WebLogic中文乱码问题 学习了:http://www.cnblogs.com/qingdaofu/p/5633225.html http://www. ...
- 实战:percona-xtrabackup 2.1.9 for mysql 5.6.19
----1.编译安装percona-xtrabackup yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr ...
- POJ 2041 Unreliable Message
简单模拟.依照题意处理一下字符串就可以. 应该是写题号写错了,本来我在VirtualJudge是加入的POJ 并查集与生成树的题. #include<cstdio> #include< ...
- python解压,压缩,以及存数据库的相关操作
zipfile实现压缩整个目录和子目录 import os,shutil,zipfile,glob def dfs_get_zip_file(input_path,result): # files = ...
- bzoj2190: [SDOI2008]仪仗队(欧拉)
2190: [SDOI2008]仪仗队 题目:传送门 题解: 跟着企鹅大佬做题! 自己瞎搞搞就OK,不难发现,如果以C作为原点建立平面直角坐标系,那么在这个坐标系中,坐标为(x,y)且GCD(x,y) ...
- 50.AngularJs directive详解及示例代码
转自:https://www.cnblogs.com/best/tag/Angular/ 本教程使用AngularJs版本:1.5.3 AngularJs GitHub: https://github ...
- ie浏览器检测不到cookie的问题
之前做项目由于客户的要求设置缓存必须由后台来设置必须使用cookie(session是没问题的),后期设置时出现了登录页面与首页来还跳转的局面.原因就是首页没检测到登录后的缓存,而后台验证到确实已经是 ...
- HD-ACM算法专攻系列(7)——Text Reverse
问题描述: 源码: /**/ #include"iostream" #include"string" using namespace std; void Pri ...