“Conocimiento Programación>C /C + + Programming

Cómo calcular los círculos de intersección de C + +

2013/5/10
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 ;

C /C + + Programming
Cómo reemplazar los elementos de una matriz en C
Cómo mostrar el contenido de una lista de matrices en un cuadro de texto en C #
Cómo crear tu propio motor del juego
Cómo utilizar botones de opción en Visual C
Cómo compilar CPP en un Mac
Cómo crear un único subproceso en CPP
Línea C + + Formación
Cómo utilizar el mapa STL Container Class
Conocimiento de la computadora © http://www.ordenador.online