以下は、左下隅にあるcartesian
軸の答えです。(0, 0)
編集
あなたx, y
は正方形の左上隅なので。それらを中央に変換します。
x = x+r
y = y-r
円の方程式はですx^2 + y^2 = r^2
。これで、与えられた点{x, y}
は、iffのときに円内または円上になりx^ + y^2 <= r^2
ます。これで、四つんばいのコーナーポイントがすべて円内または円上にある場合、長方形が円内にあると安全に仮定できます。長方形が円に含まれているかどうかを見つけるために上記の仮定の擬似コードを使用する:
boolean contains(Circle c) {
Point p_rect_1 = {x, y};
Point p_rect_2 = {x + width, y };
Point p_rect_3 = {x + width, y + height };
Point p_rect_4 = {x, y + height };
Point[] points = new Point[] { p_rect_1, p_rect_2, p_rect_3, p_rect_4 };
foreach(Point p : points) {
// ** is raise to power
if ((c.x - p.x)**2 + (c.y - p.y)**2 > c.r**2) {
return false;
}
}
return true;
}
編集
計算のためのより最適化されたアプローチ(以下のコメントでジムによって提案された)は、円の中心から長方形の最も遠い角を計算することによるでしょう:
dx = max(centerX - rectLeft, rectRight - centerX);
dy = max(centerY - rectTop, rectBottom - centerY);
return radius*radius >= dx*dx + dy*dy