Sur le plan mathématique, Pythagore est probablement une méthode simple, comme beaucoup l'ont déjà mentionné.
(x-center_x)^2 + (y - center_y)^2 < radius^2
Sur le plan informatique, il existe des moyens plus rapides. Définissez :
dx = abs(x-center_x)
dy = abs(y-center_y)
R = radius
Si un point est plus susceptible d'être à l'extérieur de ce cercle puis imaginez un carré dessiné autour de lui de telle sorte que ses côtés soient tangents à ce cercle :
if dx>R then
return false.
if dy>R then
return false.
Imaginez maintenant un losange carré dessiné à l'intérieur de ce cercle de telle sorte que ses sommets touchent ce cercle :
if dx + dy <= R then
return true.
Nous avons maintenant couvert la majeure partie de notre espace et il ne reste plus qu'une petite zone de ce cercle entre notre carré et notre diamant à tester. Ici, nous revenons à Pythagore comme ci-dessus.
if dx^2 + dy^2 <= R^2 then
return true
else
return false.
Si un point est plus susceptible d'être à l'intérieur de ce cercle puis inverser l'ordre des 3 premières étapes :
if dx + dy <= R then
return true.
if dx > R then
return false.
if dy > R
then return false.
if dx^2 + dy^2 <= R^2 then
return true
else
return false.
D'autres méthodes consistent à imaginer un carré à l'intérieur de ce cercle au lieu d'un diamant, mais cela nécessite un peu plus de tests et de calculs, sans aucun avantage sur le plan informatique (le carré intérieur et le diamant ont des surfaces identiques) :
k = R/sqrt(2)
if dx <= k and dy <= k then
return true.
20 votes
Cette question n'est pas liée au langage, j'utilise la même formule en Java, donc je ré-étiquette.
0 votes
Il semble que vous ne supposiez que des coordonnées positives. Les solutions ci-dessous ne fonctionnent pas avec des coordonnées signées.
2 votes
La plupart des solutions ci-dessous faire travailler avec des coordonnées positives et négatives. Je corrige simplement ce détail pour les futurs utilisateurs de cette question.