XNAを使用して3D空間の三角形に穴を開けようとしています。この問題を2D空間に変換したいと思います。しかし、すべての点がZ=0である三角形を回転させる方法がわかりません。Point1の座標はX=0、Y = 0、Z=0です。誰かが解決策を知っていますか?LGイェンス
質問する
288 次
2 に答える
0
(0,0,0)にないポイントの1つを選択します。その点のz値が0になるまで、y軸を中心に形状を回転させます。
残りのポイントを選択します。その点のz値が0になるまで、形状をX軸を中心に回転させます。
于 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 に答える