3

この質問/バグは、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 度になると思います。

数値が正しいかどうか疑問に思いますが、「視聴者の恐竜」が向いている方向に数値を「正規化」する必要がありますか? 私が望む「恐竜間の角度」は、それぞれの恐竜に相対的です。

要するに、私はどの恐竜がどの恐竜を見ることができるかを、その種の「視野角」に基づいて判断しようとしています。

4

1 に答える 1