以下是位于左下角的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;
}
编辑
更优化的计算方法(由 Jim 在下面的评论中建议)将通过计算距圆心最远的矩形角:
dx = max(centerX - rectLeft, rectRight - centerX);
dy = max(centerY - rectTop, rectBottom - centerY);
return radius*radius >= dx*dx + dy*dy