0

我试图在 3D 空间中使用 XNA 在三角形中打一个洞。我想将此问题转换为二维空间。但我不知道如何旋转所有点都有 Z = 0 的三角形。Point1 的坐标 X = 0,Y = 0,Z = 0。有人知道解决方案吗?LG延斯

4

2 回答 2

0
  1. 选择不在 (0,0,0) 处的点之一。围绕 y 轴旋转形状,直到该点的 z 值为 0。

  2. 选择剩余的点。围绕 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 回答