Saltar al contenido

Encontrar el centro de un círculo dados dos puntos y un radio

Solución:

Dada la ecuación de un círculo y las ecuaciones de los puntos medios:

q = sqrt((x2-x1)^2 + (y2-y1)^2)

y3 = (y1+y2)/2

x3 = (x1+x2)/2

Una respuesta será:

x = x3 + sqrt(r^2-(q/2)^2)*(y1-y2)/q 

y = y3 + sqrt(r^2-(q/2)^2)*(x2-x1)/q  

El otro será:

x = x3 - sqrt(r^2-(q/2)^2)*(y1-y2)/q

y = y3 - sqrt(r^2-(q/2)^2)*(x2-x1)/q  

Suponiendo que las variables para los puntos ya se han declarado, su código debería verse así:

double q = Math.Sqrt(Math.Pow((x2-x1),2) + Math.Pow((y2-y1),2));

double y3 = (y1+y2)/2;

double x3 = (x1+x2)/2;

double basex = Math.Sqrt(Math.Pow(r,2)-Math.Pow((q/2),2))*(y1-y2)/q; //calculate once
double basey = Math.Sqrt(Math.Pow(r,2)-Math.Pow((q/2),2))*(x2-x1)/q; //calculate once

double centerx1 = x3 + basex; //center x of circle 1
double centery1 = y3 + basey; //center y of circle 1
double centerx2 = x3 - basex; //center x of circle 2
double centery2 = y3 - basey; //center y of circle 2

fuente: http://mathforum.org/library/drmath/view/53027.html

C ª#:

 private double CenterX(double x1,double y1, double x2, double y2,double radius)
    {
        double radsq = radius * radius;
        double q = Math.Sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));
        double x3 = (x1 + x2) / 2;


     return x3 + Math.Sqrt(radsq - ((q / 2) * (q / 2))) * ((y1 - y2) / q);


    }

    private double CenterY(double x1, double y1, double x2, double y2, double radius)
    {
    double radsq = radius * radius;
    double q = Math.Sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));

     double y3 = (y1 + y2) / 2;

      return y3 + Math.Sqrt(radsq - ((q / 2) * (q / 2))) * ((x2-x1) / q);


    }

No siempre es posible encontrar un punto central único con dos puntos y un radio. De hecho, hay tres casos distintos:

        

Caso 1:

                                  

ocurre cuando el diámetro dado es menor que la distancia entre los puntos dados. En este caso no hay soluciones.

Caso 2:

                                  

ocurre cuando el diámetro dado es exactamente igual a la distancia entre dos puntos. En este caso hay una solución trivial de

                                  

Caso 3:

ocurre cuando el diámetro dado es mayor que la distancia entre los dos puntos. En este caso hay dos soluciones de las ecuaciones:

                                  

que puede encontrar soluciones, por ejemplo, en esta página:

                               

dónde q es la distancia entre los dos puntos y [x3, y3] es el punto medio.


Aquí, en este Gist, estoy tratando de implementarlos en C, sin embargo, aún no he terminado. siéntete libre de continuar desde donde me queda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *