この質問/バグは、C# のこの角度測定器に直接関連しています。問題は、シータが 180 を超える角度で間違っていることです (私はラジアンではなく度で作業しています)。
これが役立つスクリーンショットです。この写真は、3 頭の恐竜を上から見たものです。恐竜の体は灰色です。頭は白い点です。各恐竜の「視野角」(すべての種で同じではありません) は青い線です。
ご覧のとおり、各恐竜の向きは正しいです。ジョンとジュリーの間の角度のシータは正しいようです。ただし、ジュリーからジョン、マフィーからジョンへの角度はかなり間違っています。それぞれが > 180 度である必要があります。
コード スニペットは次のとおりです。
double DinoAFacing = FindAngle(
Dinosaurs[DinoA].Head.X,
Dinosaurs[DinoA].Head.Y,
Dinosaurs[DinoA].Location[Dinosaurs[DinoA].Location.Count - 1].X,
Dinosaurs[DinoA].Location[Dinosaurs[DinoA].Location.Count - 1].Y);
int Specie = ReturnDinosaurSpecie(DinoA);
double x = 50 * Math.Cos((DinoAFacing - 90) * (Math.PI / 180.0));
double y = 50 * Math.Sin((DinoAFacing - 90) * (Math.PI / 180.0));
x += Dinosaurs[DinoA].Head.X;
y += Dinosaurs[DinoA].Head.Y;
System.Windows.Point A = new System.Windows.Point();
A.X = x - Dinosaurs[DinoA].Head.X;
A.Y = y - Dinosaurs[DinoA].Head.Y;
System.Windows.Point B = new System.Windows.Point();
B.X = Dinosaurs[DinoB].Head.X - Dinosaurs[DinoA].Head.X;
B.Y = Dinosaurs[DinoB].Head.Y - Dinosaurs[DinoA].Head.Y;
double ALen = Math.Sqrt(Math.Pow(A.X, 2) + Math.Pow(A.Y, 2));
double BLen = Math.Sqrt(Math.Pow(B.X, 2) + Math.Pow(B.Y, 2));
double dotProduct = A.X * B.X + A.Y * B.Y;
double Angle
= Math.Abs(((180 / Math.PI) * Math.Acos(dotProduct / (ALen * BLen))));
slug = Dinosaurs[DinoA].PersonalName
+ " is facing: "
+ string.Format("{0:f2}", string.Format("{0:f2}", DinoAFacing))
+ "\nThe angle between "
+ Dinosaurs[DinoA].PersonalName
+ " and "
+ Dinosaurs[DinoB].PersonalName
+ " is "
+ string.Format("{0:f2}", Angle)
+ "\n"
+ Dinosaurs[DinoA].PersonalName
+ " CAN see "
+ Dinosaurs[DinoB].PersonalName;
System.Windows.MessageBox.Show(
slug,
"Dino vision",
System.Windows.MessageBoxButton.OK);
数学好きの皆さん、私のやり方の間違いに気がつくことはできますか?
ありがとう!
編集: 軸に沿って恐竜の前 50 メートルのポイントの投影が正しいことを示すスクリーン キャプチャ:
最後の変更後のスクリーン ショット:
これは「恐竜の角度」の「私の定義」であり、私が期待するものです。
- Muffie はほぼ東 (108 度) を向いています。ジョンは彼女のほぼ真後ろで、少し左にいます。Muffie と John の間の角度は約 195 度になると思います。
- ジュリーは南西 (235 度) を向いています。ジョンはジュリーの右隣にいます。ジュリーとジョンの間の角度は約 87 度になると思います。
- ジョンはジュリーをほぼ真正面から見ています (ジュリーは「正面から」の少し右側にあります)。ジョンとジュリーの間の角度は約 7 度になると思います。
数値が正しいかどうか疑問に思いますが、「視聴者の恐竜」が向いている方向に数値を「正規化」する必要がありますか? 私が望む「恐竜間の角度」は、それぞれの恐竜に相対的です。
要するに、私はどの恐竜がどの恐竜を見ることができるかを、その種の「視野角」に基づいて判断しようとしています。