Cálculo de los puntos de intersección de dos círculos es un problema un tanto complicado en la geometría , pero la solución es sencilla y fácil de implementar en C + + . Usted necesitará algún tipo de clase de punto disponible que puede manejar operaciones aritméticas básicas , como sumas y restas de puntos de 2 dimensiones . Si no tiene uno, puede utilizar un std :: vector
de la Biblioteca de plantillas estándar de la misma manera . Cosas que necesitará
clase Point que se encarga de la aritmética básica
Ver Más instrucciones
Check para Casos Especiales
1 Calcular la distancia entre los centros de los círculos :
Point delta = p2 - p1 ; float distanceSquared = delta.X * delta.X + delta.Y * delta.Y ; distancia float = sqrt ( distanceSquared ) ;
2
Check si los círculos están completamente separados el uno del otro . En este caso , la distancia entre los centros de los círculos será mayor que la suma de sus radios , así que no hay manera de que puedan intersectar . Si este es el caso , controlar el error en todo lo que funciona mejor para su programa de descarga
if ( distSquared > ( r1 + r2 ) * ( r1 + r2 ) ) noIntersections retorno; .
3
Verificar si un círculo es completamente dentro de la otra . En este caso , también habrá soluciones
if ( distSquared <( r1 - r2 ) * ( r1 - r2 ) ) noInersections retorno; .
4
Compruebe si el círculos son idénticos . Esto significa que hay un número infinito de soluciones - una para cada punto en el círculo
si ( distSquared == 0 && r1 r2 == ) infiniteIntersections retorno; .
< . br > Para las intersecciones
5
Calcular la distancia desde el centro del primer círculo de la cuerda que conecta los puntos de intersección
flotador chordDistanceSquared = ( r1 * r1 - r2 r2 * - distSquared ) * ( * r1 r1 - r2 r2 * - distSquared ) /( 4 * distSquared ) ; float chordDistance = sqrt ( chordDistanceSquared ) ;
6
Calcular la mitad de la longitud de la cuerda :
flotador halfChordLength = sqrt ( * r1 r1 - chordDistanceSquared ) ;
7
encontrar el punto en el centro de la cuerda :
Point chordMidpoint = p1 + chordDistance * delta /sqrt ( distSquared ) ;
8
Calcule las ubicaciones de los puntos de intersección con la información que ha calculado hasta ahora:
Intersection1.x = chordMidpoint.x + chordDistance * ( p2.y - p1.y ) /distancia ; Intersection1.y = chordMidpoint.y + chordDistance * ( p2.x - p1.x ) /distancia ; Intersection2.x = chordMidpoint.x - chordDistance * ( p2.y - p1 . y) /distancia ; Intersection2.y = chordMidpoint.y - chordDistance * ( p2.x - p1.x ) /distancia ;