Beregning av skjæringspunkter av to sirkler er et litt kinkig problem i geometri , men løsningen er grei og enkel å implementere i C + + . Du vil trenge noen form for punkt klassen tilgjengelig som kan håndtere grunnleggende aritmetikk, som addisjon og subtraksjon av to - dimensjonale punkter . Hvis du ikke har en, kan du bruke en std :: vector 
 fra Standard Template Library på samme måte . Du trenger: 
 Point klasse som håndterer grunnleggende aritmetikk 
 Vis flere instruksjoner 
 Sjekk for spesielle tilfeller 
 en  Beregn avstanden mellom sirklene ' sentrene : 
 
 Point delta = p2 - p1 ; float distanceSquared = delta.X * delta.X + delta.Y * delta.Y ; float avstand = sqrt ( distanceSquared ) ; 
 2 
 Sjekk hvis kretsene er fullstendig atskilt fra hverandre . I dette tilfelle vil avstanden mellom sentrene til sirklene være større enn summen av radiene deres , så er det ingen måte kan de krysser hverandre. Hvis dette er tilfelle , håndterer feilen på den måten som fungerer best for programmet 
 
 if ( distSquared > ( R1 + R2 ) * ( R1 + R2 )) return noIntersections ; . 
 
 3 
 Sjekk om en sirkel er helt innenfor den andre. I dette tilfellet vil det også være noen løsninger 
 
 if ( distSquared < ( r1 - r2) * ( r1 - r2) ) return noInersections ; . 
 4 
 Sjekk om kretsene er identiske. Dette betyr at det finnes et uendelig antall løsninger - ett for hvert punkt på sirkelen 
 
 hvis ( distSquared == 0 && r1 == r2 ) retur infiniteIntersections ; . 
 < . br > Finn Intersections 
 5 
 Beregn avstanden fra sentrum av den første sirkelen til akkord koble skjæringspunkter 
 
 float chordDistanceSquared = ( r1 * r1 - r2 * r2 - distSquared ) * ( r1 * r1 - r2 * r2 - distSquared ) /( 4 * distSquared ) ; float chordDistance = sqrt ( chordDistanceSquared ) ; 
 6 
 Beregn halvparten av lengden på akkord : 
 
 float halfChordLength = sqrt ( r1 * r1 - chordDistanceSquared ) ; 
 7 
 Finn det punktet midt på akkord : en 
 Point chordMidpoint = p1 + chordDistance * deltaet /sqrt ( distSquared ) ; 
 8 
 Beregn plasseringen av de skjæringspunkter ved hjelp av informasjonen du har beregnet så langt : en 
 Intersection1.x = chordMidpoint.x + chordDistance * ( p2.y - p1.y ) /distanse ; Intersection1.y = chordMidpoint.y + chordDistance * ( p2.x - p1.x ) /distanse ; Intersection2.x = chordMidpoint.x - chordDistance * ( p2.y - p1 . y ) /distanse ; Intersection2.y = chordMidpoint.y - chordDistance * ( p2.x - p1.x ) /distanse ;