Calcolo dei punti di intersezione dei due cerchi è un problema un po 'complicato in geometria , ma la soluzione è semplice e semplice da implementare in C + + . Avrete bisogno di un qualche tipo di classe point a disposizione in grado di gestire operazioni aritmetiche di base , come l'addizione e la sottrazione di punti 2 -dimensionali . Se non ne avete uno , potete usare un std :: vector 
 della Standard Template Library nello stesso modo . Cose che ti serviranno 
 classe Point che gestisce l'aritmetica di base 
 Mostra più istruzioni Appartamenti Controlla in casi particolari 
 1  Calcola la distanza tra i centri dei cerchi : < br 
 Point > delta = p2 - p1 ; float distanceSquared = delta.X * delta.X + delta.Y * delta.Y ; distanza float = sqrt ( distanceSquared ) ; 
 2 
 Arrivo se i cerchi sono completamente separati gli uni dagli altri . In questo caso , la distanza tra i centri dei cerchi sarà maggiore della somma dei loro raggi , quindi non c'è modo possono intersecarsi . Se questo è il caso , gestire l'errore nel modo che funziona meglio per il vostro programma 
 
 se ( distSquared > ( R1 + R2 ) * ( R1 + R2 ) ) noIntersections ritorno; . 
 
 3 
 Verificare se un cerchio è completamente dentro l'altro . In questo caso , ci saranno anche presenti soluzioni 
 
 se ( distSquared < ( r1 - r2 ) * ( r1 - r2 ) ) noInersections ritorno; . 
 4 
 Verifica se la cerchi sono identici . Questo significa che ci sono un numero infinito di soluzioni - uno per ogni punto del cerchio 
 
 se ( distSquared == 0 && r1 == r2 ) infiniteIntersections ritorno; . 
 < . br> Trova le intersezioni 
 5 
 Calcola la distanza dal centro del primo cerchio alla corda che collega i punti di intersezione 
 
 float chordDistanceSquared = ( r1 * r1 - r2 * r2 - distSquared ) * ( r1 * r1 - r2 * r2 - distSquared ) /( 4 * distSquared ) ; float chordDistance = sqrt ( chordDistanceSquared ) ; 
 6 
 Calcolare la metà della lunghezza della corda : 
 
 float halfChordLength = sqrt ( r1 * r1 - chordDistanceSquared ) ; 
 7 
 Trova il punto al centro della corda : 
 
 Point chordMidpoint = p1 + chordDistance * delta /sqrt ( distSquared ) ; 
 8 
 calcolare la posizione dei punti di intersezione con le informazioni che hai calcolato finora: 
 
 Intersection1.x = chordMidpoint.x + chordDistance * ( p2.y - p1.y ) /distanza ; Intersection1.y = chordMidpoint.y + chordDistance * ( p2.x - p1.x ) /distanza ; Intersection2.x = chordMidpoint.x - chordDistance * ( p2.y - p1 . y) /distanza ; Intersection2.y = chordMidpoint.y - chordDistance * ( p2.x - p1.x ) /distanza ;