两个坐标系之间的点CGAL变换
A point CGAL transformation between two coordinate systems
使用CGAL,如何确定点从一个系统到另一个系统的坐标?假设我们有:
Point p1(1.0, 1.0, 1.0);
其在由向量确定的典型坐标系中表示:
Vector vx1(1.0, 0.0, 0.0);
Vector vy1(0.0, 1.0, 0.0);
Vector vz1(0.0, 0.0, 1.0);
表示坐标轴。现在取另一个系统的坐标轴的矢量,如何确定p1在该系统中的坐标?
Vector vx2(1.0, -1.0, -1.0);
Vector vy2(-1.0, 1.0, -1.0);
Vector vz2(1.0, 1.0, 0.0);
我想我必须确定一个矩阵,以便将其传递给CGAL::Aff_transformation_3
的对象,但我不知道如何。
Vector p2 = p1.transform(??);
有什么建议吗?
经过一番研究,我在这里找到了解决问题的理论。https://en.wikipedia.org/wiki/Change_of_basis
为了澄清一点,构建这些定义的目的是让代码更容易理解。
typedef CGAL::Cartesian<long double> KC;
typedef KC::Point_3 Point;
typedef KC::Vector_3 Vector;
typedef CGAL::Aff_transformation_3<KC> Transform3;
在考虑了上述因素后,建立了如下仿射变换:
Transform3 tr3(
vx2.x(), vx2.y(), vx2.z(),
vy2.x(), vy2.y(), vy2.z(),
vz2.x(), vz2.y(), vz2.z());
然后,用这个变换对象,我可以得到所需系统中一个点的坐标:
Point p1_out = p1.transform (tr3);
谢谢!
在基B1中有一个向量p1,在基B2中寻找一个向量p2,它是的解
M*p2=p1
其中基从B1变化到B2的M矩阵。M的行是基B2的矢量在基B1中的坐标。因此,你必须反转M,并将其乘以p1,才能找到p2:
p2=M^-1*p1
如果要使用CGAL::Aff_transformation_3,则必须使用Class_2<内核>几何对象,例如Point_3和Vector_3:
typedef CGAL::Cartesian<double> K;
在main()函数中:
K::Vector_3 vx2(1.0, -1.0, -1.0), vy2(-1.0, 1.0, -1.0), vz2(1.0, 1.0, 0.0);
K::Point_3 p1(1.0, 1.0, 1.0);
CGAL::Aff_transformation_3<K> M(vx2.x(),vx2.y(),vx2.z(),vy2.x(), vy2.y(), vy2.z(),vz2.x(), vz2.y(), vz2.z());
K::Point_3 p2=p1.transform(M.inverse());
相关文章:
- 基于范围的变换以实现正常循环
- CGAL:如何创建填充边界曲线的曲面网格?
- OpenCV 傅里叶变换复杂输出问题
- CGAL:添加要素失败
- CGAL:在浏览平面地图时使用类型"标记"
- SFML 纹理变换(放大)
- Python3.6 模板中的 CGAL C++ 集成错误
- 是否可以制作没有内部分割的cgal 3d多多马因网格?
- 平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
- 如何使用CGAL::D ereference_property_map进行简化?
- CGAL 示例上的编译错误
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- 在特征中显示仿射变换
- 从 CGAL 3D 网格生成中获取顶点坐标的 -6.27744e+66:mesh_implicit_sphere示例
- CGAL:无法打开 .xyz 文件
- 在同一项目中使用 CGAL 和 PCL
- CGAL - 表面网格参数化
- 离散傅立叶变换C++
- 如何变换 CGAL 表面网格顶点
- 两个坐标系之间的点CGAL变换