旋转三角形到Z = 0

时间:2013-02-01 17:35:00

标签: c# xna rotation geometry

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

2 个答案:

答案 0 :(得分:0)

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

  2. 选择剩下的点。围绕X轴旋转形状,直到该点的z值为0.

答案 1 :(得分:0)

给定P1P2P3三角形的点。

让我们注意:

  • 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));