我试图在 3D 空间中使用 XNA 在三角形中打一个洞。我想将此问题转换为二维空间。但我不知道如何旋转所有点都有 Z = 0 的三角形。Point1 的坐标 X = 0,Y = 0,Z = 0。有人知道解决方案吗?LG延斯
问问题
288 次
2 回答
0
选择不在 (0,0,0) 处的点之一。围绕 y 轴旋转形状,直到该点的 z 值为 0。
选择剩余的点。围绕 X 轴旋转形状,直到该点的 z 值为 0。
于 2013-02-01T17:40:53.233 回答
0
给定P1
, P2
,P3
三角形的点。
让我们注意:
a = P2 - P1
b = P3 - P1
n = Vector3.CrossProduct(a, b).Normalized()
->n
是三角形的法线
三角形在Z = 0
平面上当且仅是,n.z = 0
然后,只需使用:
d = Vector3.CrossProduct(n, z).Normalized()
-> 这是你的旋转轴angle = (float)System.Math.Acos(Vector3.DotProduct(n, z))
-> 这是你旋转的角度
代码是:
Vector3 a = P2 - P1;
Vector3 b = P3 - P1;
Vector3 n = Vector3.Cross(a, b);
n.Normalize();
Vector3 d = Vector3.Cross(n, Vector3.UnitZ);
d.Normalize();
float angle = (float)System.Math.Acos(Vector3.Dot(n, Vector3.UnitZ));
Vector3 newpoint2 = P1 + Vector3.Transform(a, Matrix.CreateFromAxisAngle(d, angle));
Vector3 newpoint3 = P1 + Vector3.Transform(b, Matrix.CreateFromAxisAngle(d, angle));
于 2013-02-01T17:49:17.953 回答