Calcul des points d'intersection des deux cercles est un problème assez délicat dans la géométrie, mais la solution est simple et facile à mettre en œuvre en C + + . Vous aurez besoin d' une sorte de classe de point disponible qui peut gérer l'arithmétique de base , telles que l'addition et la soustraction de points en 2 dimensions . Si vous n'en avez pas , vous pouvez utiliser un std :: vector
de la Standard Template Library de la même façon . Choses que vous devez classe Point
qui gère de base arithmétique
Show More Instructions
Check pour les cas particuliers
1 calculer la distance entre les centres des cercles :
point delta = p2 - p1 ; flotteur distanceSquared = Ax * Ax + Ay Ay * ; distance float = sqrt ( distanceSquared ) ;
2
Vérifier si les cercles sont complètement séparées l'une de l' autre . Dans ce cas, la distance entre les centres des cercles sera plus grande que la somme de leurs rayons , donc il n'y a aucun moyen qu'ils peuvent se croiser . Si c'est le cas , gérer l'erreur dans la manière qui convient le mieux à votre programme
if ( distSquared > ( R1 + R2 ) * ( R1 + R2 ) ) noIntersections de retour; .
Hôtels 3
Vérifiez si un cercle est complètement dans l'autre. Dans ce cas, il y aura également pas de solutions
if ( distSquared < (r1 - r2) * (r1 - r2) ) noInersections de retour; .
4
Vérifiez si le cercles sont identiques. Cela signifie qu'il ya un nombre infini de solutions - un pour chaque point du cercle
si ( distSquared == 0 && r1 == r2) infiniteIntersections de retour; .
< . br> Trouver les intersections
5
calculer la distance entre le centre du premier cercle de la corde reliant les points d'intersection
flotteur chordDistanceSquared = (r1 * r1 - r2 r2 * - distSquared ) * ( r1 * r1 - r2 * r2 - distSquared ) /( 4 * distSquared ) ; flotteur chordDistance = racine ( chordDistanceSquared ) ;
6
Calculer la moitié de la longueur de la corde :
flotteur halfChordLength = racine (r1 * r1 - chordDistanceSquared ) ;
7
Trouver le point au centre de la corde :
point chordMidpoint = p1 + chordDistance * delta /sqrt ( distSquared ) ;
8
Calculer les emplacements des points d'intersection en utilisant les informations que vous avez calculé jusqu'ici :
Intersection1.x = chordMidpoint.x + chordDistance * ( p2.y - p1.y ) /distance, Intersection1.y = chordMidpoint.y + chordDistance * ( P2.x - P1.x ) /distance, Intersection2.x = chordMidpoint.x - chordDistance * ( p2.y - p1 . y) /distance, Intersection2.y = chordMidpoint.y - chordDistance * ( P2.x - P1.x ) /distance,