gebruik van de Standard Template Library op dezelfde manier . < : Wat je
Point klasse die behandelt elementaire rekenkundige
Toon Meer Aanwijzingen
Check for Special Cases
1 Bereken de afstand tussen de cirkels ' centra nodig br
Point > delta = p2 - p1 ; float distanceSquared = delta.X * delta.X + delta.Y * delta.Y ; float afstand = sqrt ( distanceSquared ) ;
controleren 2 als de cirkels zijn volledig gescheiden van elkaar . In dit geval zal de afstand tussen de middelpunten van de cirkels groter dan de som van de radii , dus er is geen manier kunnen kruisen . Als dit het geval is , omgaan met de fout op welke manier het beste werkt voor uw programma
if ( distSquared > ( R1 + R2 ) * ( R1 + R2 ) ) return noIntersections ; .
Goedkope 3
Controleer als er een cirkel is volledig binnen de andere . In dit geval , zal er ook geen oplossingen
if ( distSquared < ( r1 - r2 ) * ( r1 - r2 ) ) return noInersections ; .
Controleer 4 indien de cirkels identiek . Dit betekent dat er een oneindig aantal oplossingen - een voor elk punt op de cirkel
if ( distSquared == 0 && r1 == r2 ) return infiniteIntersections ; .
< . br > Vind de Kruisingen
5
Bereken de afstand van het centrum van de eerste cirkel om het akkoord verbinden de snijpunten
float
chordDistanceSquared = ( r1 * r1 - r2 * r2 - distSquared ) * ( * r1 r1 - r2 * r2 - distSquared ) /( 4 * distSquared ) ; float chordDistance = sqrt ( chordDistanceSquared ) ;
6
Bereken de helft van de lengte van het akkoord : < br >
float halfChordLength = sqrt ( r1 * r1 - chordDistanceSquared ) ;
7
Vind de punt in het midden van het akkoord :
Point chordMidpoint
= p1 + chordDistance * delta /sqrt ( distSquared ) ;
8
Bereken de locaties van de snijpunten met de informatie die je tot nu toe hebt berekend :
Intersection1.x = chordMidpoint.x + chordDistance * ( p2.y - p1.y ) /afstand ; Intersection1.y = chordMidpoint.y + chordDistance * ( p2.x - p1.x ) /afstand ; Intersection2.x = chordMidpoint.x - chordDistance * ( p2.y - p1 . y) /afstand ; Intersection2.y = chordMidpoint.y - chordDistance * ( p2.x - p1.x ) /afstand ;