【发布时间】:2016-07-26 11:36:20
【问题描述】:
我有一个全局坐标系(X、Y、Z)和一个带点(A、B、C 和中心)的三角形。我知道这些点的所有坐标。
- 我需要将全局坐标系从 (0; 0; 0) 移动到三角形中心,以便所有点:A、B、C 和中心都有 Z = 0 的新坐标。之后我需要知道这些点在与新坐标系的关系中的新坐标。新坐标系的方向并不重要。
- 此外,如果有可能将 3D 点(三角形点)转换为 2D 平面而不会丢失其几何形状(大小)。它不应该是二维平面的投影。
>> A=[10.63307; -7.72528; 21.26636];
B=[4.06139; -12.49988; 21.26636];
C=[-6.57172; -20.22529; 13.14344];
Centr=[-4.38113; -13.48349; 18.55872];
>> V1=(B-A)/(norm(B-A))
V1 =
-0.8090
-0.5878
0
>> V2=((C-A)-(dot((C-A),V1)*V1))/(norm((C-A)-(dot((C-A),V1)*V1)))
V2 =
0.0000
-0.0000
-1.0000
>> V3=cross(V1,V2)
V3 =
0.5878
-0.8090
0.0000
>> M=[V1,V2,V3]
M =
-0.8090 0.0000 0.5878
-0.5878 -0.0000 -0.8090
0 -1.0000 0.0000
>> Anew=inv(M)*(A-Centr)
Anew =
-15.5313
-2.7076
4.1666
>> Bnew=inv(M)*(B-Centr)
Bnew =
-7.4083
-2.7076
4.1666
>> Cnew=inv(M)*(C-Centr)
Cnew =
5.7350
5.4153
4.1666
这是我得到的: From this
【问题讨论】:
-
这是一道数学题,与 c++ 或 matlab 几乎没有关系(除非您需要两者中的任何一个的代码,在这种情况下您应该展示您已经尝试过的内容)
-
顺便说一句,这是非常基本的几何形状。 z 垂直于三角形,另外两个方向您只需选择位于三角形上。有什么问题?
-
将
Z全部设置为0,您将获得从3D到2D的转换。例如,如果要将坐标转换为位于 (2, 2) 处的新 (0,0) 系统,则需要从所有其他坐标中减去 (2,2)。那么结果就是新的 (0,0) 系统。现在可以请您显示一些minimal reproducible example 吗? -
@FirstStep 这不一定将三角形映射到三角形(如果两点仅在 z 坐标上有所不同)。他还提到三角形的大小应该保持不变
-
我认为这是一个非常好的问题,它对于在 C++ 或 Matlab(OpenGL,...)中以编程方式操作 3D 坐标的人很有用。
标签: c++ matlab math coordinates coordinate-systems