21

円を想像してみてください。パイを想像してみてください。X、Yの提供されたパラメーターがそれらのパイピースの1つに含まれているかどうかを判別するブール値を返そうとしていると想像してください。

アークについて私が知っていること:

CenterX、CenterY、Radius、StartingAngle、EndingAngle、StartingPoint(円周上の点)、EndingPoint(円周上の点)があります。

X、Yの座標が与えられた場合、この座標が円グラフ内のどこかに含まれているかどうかを確認したいと思います。

4

4 に答える 4

36

小切手:

  1. centerX、centerYからX、Yまでの角度は、startとendangleの間にある必要があります。
  2. centerX、centerYからX、Yまでの距離は、半径よりも小さくする必要があります

そして、あなたはあなたの答えを持っているでしょう。

于 2011-06-07T19:51:14.107 に答える
16

これを使用して、X、Yを極座標に変換します。

角度=arctan(y / x); 半径=sqrt(x * x + y * y);

その場合、AngleはStartingAngleとEndingAngleの間にあり、Radiusは0とRadiusの間にある必要があります。

于 2011-06-07T19:53:09.803 に答える
16

私はこの質問が古いことを知っていますが、どの答えも円上の弧の配置を考慮していません。

このアルゴリズムは、すべての角度が0〜360であり、円弧が正の数学的方向(反時計回り)に描画されることを考慮しています。

まず、極座標に変換できます:半径(R)と角度(A)。注:可能な場合はAtan2関数を使用してください。ウィキ

R = sqrt((X-CenterX)^ 2 +(Y-CenterY)^ 2)

A = atan2(Y-CenterY、X-CenterX)

ここで、R <半径の場合、点は円の内側にあります。

角度がStartingAngle(S)とEndingAngle(E)の間にあるかどうかを確認するには、次の2つの可能性を考慮する必要があります。

1)S <Eの場合、S <A <Eの場合、ポイントはスライス内にあります

画像1

2)S> Eの場合、2つのシナリオが考えられます

画像2

  • A>Sの場合

次に、ポイントはスライスの内側にあります

画像3

  • A<Eの場合

次に、ポイントはスライスの内側にあります

画像4

他のすべての場合、ポイントはスライスの外側にあります。

于 2018-08-17T13:36:25.820 に答える
0

開始角度と終了角度を比較する前に、atan2()を0〜360に変換する必要があります。

(A> 0?A:(2 PI + A))* 360 /(2 PI)

于 2020-10-04T04:12:11.527 に答える