ある角度が他の 2 つの角度の間にあるかどうかを調べようとしています。これを実行するための単純な関数を作成しようとしましたが、角度のすべての可能な値に対して機能するテクニックはありません。
関数を編集して、角度が他の 2 つの角度の間にあるかどうかを正しく判断するのを手伝ってもらえますか?
上の写真では; 緑の点を中心点として使用し、緑の点に対する各線の角度を決定します。次に、緑の点に対する黒の点の角度を計算します。黒い点の角度が2本の線の角度の間にあるかどうかを確認しようとしています。
注: 私の場合; 角度 (targetAngle) は、2 つの角度の差が < 180 度であり、targetAngle がそれらの 2 つの角度によって形成される空洞内にある場合、他の 2 つの角度の間にあると言われます。
次のコードは機能するはずですが、これらの場合は失敗します(角度の間にあります)
:
bool is_angle_between(int target, int angle1, int angle2)
{
int rAngle1 = ((iTarget - iAngle1) % 360 + 360) % 360;
int rAngle2 = ((iAngle2 - iAngle1) % 360 + 360) % 360;
return (0 <= rAngle1 && rAngle1 <= rAngle2);
}
// Example usage
is_angle_between(3, 41, 345);
私が試みた別のテクニックも機能しません:
int is_angle_between(int target, int angle1, int angle2)
{
int dif1 = angle1-angle2;
int dif2 = angle2-angle1;
int uDif1 = convert_to_positive_angle( dif1 ); // for eg; convert -15 to 345
int uDif2 = convert_to_positive_angle( dif2 );
if (uDif1 <= uDif2) {
if (dif1 < 0) {
return (target <= angle1 && target >= angle2);
}
else return (in_between_numbers(iTarget, iAngle1, iAngle2));
}
else {
if (dif2 < 0) {
return (target <= angle1 && target >= angle2);
}
else return (in_between_numbers(iTarget, iAngle1, iAngle2));
}
return -1;
}