2

ボタンの真ん中に想像上の円を描いています。

円の半径はHeight/2ifHeight>WidthまたはWidth/2ifWidth>Heightです。ここで、この円に含まれる座標 (ピクセル単位) を計算する必要があります。アイデアは、たとえばマウス カーソルがその円の上に置かれると、何かが起こるということです。

4

4 に答える 4

4

各座標を計算するのはやり過ぎです。中心までの距離を比較するだけです。例えば:

int radius = 5; // whatever

int deltaX = originX - mouseX, deltaY = originY - mouseY;

// compare the square distance, to avoid an unnecessary square-root
if((deltaX * deltaX) + (deltaY * deltaY) <= (radius * radius)) {
    // inside the circle, or on the edge
}

ちょっとした計算を避けるために、簡単なバウンディング ボックス チェック、つまり四角形領域のチェック (加算/減算のみ) を行うこともできます。これは組み合わせて使用​​できます。

  • 境界ボックスをチェックする
    • 境界ボックス内にない場合は、円内にありません。
    • 境界ボックス内にある場合、計算を行って平方距離を比較します
于 2012-09-11T07:26:13.820 に答える
3

次の式が満たされるとき、あなたは円の中にいます。

Math.pow(mouse_pos_x-center_circle_x,2)+Math.pow(mouse_pos_y-center_circle_y,2)<Math.pow(radius,2)
于 2012-09-11T07:26:30.850 に答える
1

定義による円の面積は、距離が中心以下の点のグループです。

ポイントが円内にあるかどうかをテストするために必要なのは、ポイントと中心点の間の距離を計算することだけです。この距離が円の半径よりも小さい場合、点は円の中にあります。

double Distance(Point p1, Point p2)
{
    int x = p1.X - p2.X;
    int y = p1.Y - p2.Y;
    return Math.Sqrt(x * x + y * y);   
}
于 2012-09-11T07:27:06.607 に答える
1

次の条件を使用できます。

x^2+y^2<R^2

どこで R - 半径, このすべてのポイントは円です.

于 2012-09-11T07:28:14.217 に答える