est Ci-dessous réponse pour cartesian
axe où se trouve (0, 0)
dans le coin inférieur gauche.
EDIT Puisque votre x, y
est en haut à gauche du carré. les transformer pour être dans le centre:
x = x+r
y = y-r
équation du cercle est x^2 + y^2 = r^2
, maintenant point donné {x, y}
se situera à l'intérieur ou sur le cercle quand ssi x^ + y^2 <= r^2
. Maintenant, nous pouvons faire en toute sécurité l'hypothèse que le rectangle se trouvera dans le cercle si les quatre coins se trouvent à l'intérieur ou sur le cercle. En utilisant pseudo-code hypothèse ci-dessus pour trouver si rectangle est contenu dans le cercle:
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;
}
EDIT Plus d'approche optimisée pour le calcul (suggéré par Jim dans les commentaires ci-dessous) serait en calculant le coin le plus éloigné du rectangle de le centre du cercle:
dx = max(centerX - rectLeft, rectRight - centerX);
dy = max(centerY - rectTop, rectBottom - centerY);
return radius*radius >= dx*dx + dy*dy
@Codeguy Comment le code que vous avez WRI si loin pour le résoudre ??? – vikiiii