2016-11-14 3 views
0

Je veux vérifier si un point P (x1, y1) appartient, est à l'intérieur, un carré de centre C (x, y) et horizontal diagonale r.Vérifier si le point appartient à la case

  • place avec les caractéristiques ci-dessus:

enter image description here

  • Fonction qui calcule la distance entre deux points

    float calculate_distance (float x1,float y1,float x2 ,float y2) 
    { 
        float distance; 
        float distance_x = x1-x2; 
        float distance_y = y1- y2; 
        distance = sqrt((distance_x * distance_x) + (distance_y * distance_y)); 
        return distance; 
    } 
    
+0

Toujours (\ *) préfère 'double' (plutôt que' float') pour les variables à virgule flottante. (\*) Oui toujours! – pmg

+0

math.stackexchange.com a des questions similaires. [Comment vérifier si un point est à l'intérieur d'un rectangle?] (Http://math.stackexchange.com/questions/190111/how-to-check-if-a-point-is-inside-a-rectangle) – dilanaslan

Répondre

2

Vous n'avez pas besoin de la distance euclidienne entre les points ici.

Tout comme pour un cercle (à l'origine), vous savez que x + y est une constante (r), ici vous que | x | + | y ​​| est une constante (r encore), ce qui est encore plus simple. Donc vous pouvez interpoler entre ces formes en utilisant des exposants entre 1 et 2.

Donc pour vérifier si un point (x, y) est à l'intérieur du losange (qui sans perte de généralité peut être supposé être centré sur l'origine) , juste test

fabsf(x)+fabsf(y) <= r