:あなたはこれを与える場合結果範囲0と2つの3Dベクトル間の角度 - 私は2つのベクトルとして考えるの三点(下記参照)との間の角度を計算する方法を探しています360
using System.Windows.Media.Media3D;
public static float AngleBetweenThreePoints(Point3D[] points)
{
var v1 = points[1] - points[0];
var v2 = points[2] - points[1];
var cross = Vector3D.CrossProduct(v1, v2);
var dot = Vector3D.DotProduct(v1, v2);
var angle = Math.PI - Math.Atan2(cross.Length, dot);
return (float) angle;
}
を以下の点:
var points = new[]
{
new Point3D(90, 100, 300),
new Point3D(100, 200, 300),
new Point3D(100, 300, 300)
};
または以下:
var points = new[]
{
new Point3D(110, 100, 300),
new Point3D(100, 200, 300),
new Point3D(100, 300, 300)
};
あなたは同じ結果を得ます。私は、関数の戻り値(0、0、10000)が最初の場合で、(0、0、-10000)が2番目の値を返すことがわかりますが、この情報はcross.Lengthで失われます。結果。
私が探しているのは、結果の範囲0〜360で、0〜180に限定されません。どのように達成できますか?
ザ・180度であるにMath.PIから差し引かれません。あなたの結果は0から360です。したがって、180から引き算すると+180から-180の結果が得られます。 – jdweng
3D空間では、2つのベクトル間の角度は0〜180度の間でのみ定義されます。どんな状況で、180度から360度の間の答えが必要でしょうか?これは、2D空間では、方向または符号付きの角度として定義するのは簡単ですが、3D空間には適用されません。 –