0

XNAを使用して3D空間の三角形に穴を開けようとしています。この問題を2D空間に変換したいと思います。しかし、すべての点がZ=0である三角形を回転させる方法がわかりません。Point1の座標はX=0、Y = 0、Z=0です。誰かが解決策を知っていますか?LGイェンス

4

2 に答える 2

0
  1. (0,0,0)にないポイントの1つを選択します。その点のz値が0になるまで、y軸を中心に形状を回転させます。

  2. 残りのポイントを選択します。その点のz値が0になるまで、形状をX軸を中心に回転させます。

于 2013-02-01T17:40:53.233 に答える
0

与えられP1P2、、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 に答える