Encuentre el punto de intersección de tres círculos mediante programación [cerrado]

Usted podría obtener ayuda de este código C . Portarlo a JAVA no debería ser un desafío. La explicación está aquí . Buscar / desplazarse a: intersección de dos círculos

Usando este método, encuentre la intersección de dos círculos ... digamos (x,y). Ahora el tercer círculo se intersecará en el punto x,ysolo si la distancia entre él centery el punto x,yes igual a r.

case 1)Si distance(center,point) == r, entonces x,yes el punto de intersección.

case 2)Si distance(center,point) != r, entonces no existe tal punto.

Código (portado de [aquí! Todos los créditos al autor original):

private boolean calculateThreeCircleIntersection(double x0, double y0, double r0,
                                                 double x1, double y1, double r1,
                                                 double x2, double y2, double r2)
{
    double a, dx, dy, d, h, rx, ry;
    double point2_x, point2_y;

    /* dx and dy are the vertical and horizontal distances between
    * the circle centers.
    */
    dx = x1 - x0;
    dy = y1 - y0;

    /* Determine the straight-line distance between the centers. */
    d = Math.sqrt((dy*dy) + (dx*dx));

    /* Check for solvability. */
    if (d > (r0 + r1))
    {
        /* no solution. circles do not intersect. */
        return false;
    }
    if (d < Math.abs(r0 - r1))
    {
        /* no solution. one circle is contained in the other */
        return false;
    }

    /* 'point 2' is the point where the line through the circle
    * intersection points crosses the line between the circle
    * centers.
    */

    /* Determine the distance from point 0 to point 2. */
    a = ((r0*r0) - (r1*r1) + (d*d)) / (2.0 * d) ;

    /* Determine the coordinates of point 2. */
    point2_x = x0 + (dx * a/d);
    point2_y = y0 + (dy * a/d);

    /* Determine the distance from point 2 to either of the
    * intersection points.
    */
    h = Math.sqrt((r0*r0) - (a*a));

    /* Now determine the offsets of the intersection points from
    * point 2.
    */
    rx = -dy * (h/d);
    ry = dx * (h/d);

    /* Determine the absolute intersection points. */
    double intersectionPoint1_x = point2_x + rx;
    double intersectionPoint2_x = point2_x - rx;
    double intersectionPoint1_y = point2_y + ry;
    double intersectionPoint2_y = point2_y - ry;

    Log.d("INTERSECTION Circle1 AND Circle2:", "(" + intersectionPoint1_x + "," + intersectionPoint1_y + ")" + " AND (" + intersectionPoint2_x + "," + intersectionPoint2_y + ")");

    /* Lets determine if circle 3 intersects at either of the above intersection points. */
    dx = intersectionPoint1_x - x2;
    dy = intersectionPoint1_y - y2;
    double d1 = Math.sqrt((dy*dy) + (dx*dx));

    dx = intersectionPoint2_x - x2;
    dy = intersectionPoint2_y - y2;
    double d2 = Math.sqrt((dy*dy) + (dx*dx));

    if(Math.abs(d1 - r2) < EPSILON) {
        Log.d("INTERSECTION Circle1 AND Circle2 AND Circle3:", "(" + intersectionPoint1_x + "," + intersectionPoint1_y + ")");
    }
    else if(Math.abs(d2 - r2) < EPSILON) {
        Log.d("INTERSECTION Circle1 AND Circle2 AND Circle3:", "(" + intersectionPoint2_x + "," + intersectionPoint2_y + ")"); //here was an error
    }
    else {
        Log.d("INTERSECTION Circle1 AND Circle2 AND Circle3:", "NONE");
    }
    return true;
}

Llame a este método de la siguiente manera:

calculateThreeCircleIntersection(-2.0, 0.0, 2.0, // circle 1 (center_x, center_y, radius)
                                  1.0, 0.0, 1.0, // circle 2 (center_x, center_y, radius)
                                  0.0, 4.0, 4.0);// circle 3 (center_x, center_y, radius)

Además, defina EPSILONun valor pequeño que sea aceptable para los requisitos de su aplicación

private static final double EPSILON = 0.000001;

Nota: Tal vez alguien debería probar y verificar si los resultados son correctos. No puedo encontrar ninguna manera fácil de hacerlo ... funciona para los casos básicos que he probado

Respuesta 1

No entiendo por qué no puedo asignar valores a los elementos de una matriz usando el bucle for mejorado. Por ejemplo, usando for loop como ese int [] array = new int [5]; para (int i = 0; i <5; ...

Quiero cambiar los dos símbolos hexadecimales en un byte, por ejemplo, si input = 0xEA luego output = 0xAE Tiene que estar en java. Ya tengo este método que hice, pero solo funciona en algunos ...

Intenté hacer un proyecto simple para mi skype-bot, y se ve así: import com.skype.Skype; import com.skype.SkypeException; public class SkypeDemo {public static void main (String [] args) ...

Quiero incrustar google maps en un JPanel. Como quiero características como acercar / alejar, no es factible usar imágenes estáticas. Para lograr esto, probablemente necesite insertar una página web (que muestra los mapas de Google) ...