jueves, 16 de febrero de 2017

Deducción de un circulo partiendo de 3 puntos conocidos

Si tenemos tres puntos, podemos suponer que son parte de una circunferencia.


La formula es sencilla. Teniendo los puntos A,B,C, trazo la línea que pasa por AB y la roto 90 grados (la rotación tiene centro a la mitad de ambos puntos) sea (AB)'. Pues bien, créanlo o no, esta línea pasa por el centro de la circunferencia. Si hago lo mismo con los puntos BC para obterner (BC)', entonces, el punto de colisión entre (AB)' y (BC)' será el centro de la circunferencia.


Acá pongo las funciones de javascript para hacerlo

var linesColition=function(x1,y1,m1,x2,y2,m2){
var mm=m1-m2,x,y;
if(m1==m2) return false;
if(isNaN(m1*0)){
x=x1;
y=m2*(x-x2)+y2;
}else
if(isNaN(m2*0)){
x=x2;
y=m1*(x-x1)+y1;
}else{
x=( m1*x1 -m2*x2 +y2 -y1 )/mm;
y=( m2*y1 -m1*y2 +m1*m2*(x2 -x1) )/-mm;
}
return [x,y];
};

var getCircleByThreePoints=function(A,B,C){
var x1=(A[0]+B[0])/2, y1=(A[1]+B[1])/2, m1=(A[0]-B[0])/(B[1]-A[1]),
x2=(B[0]+C[0])/2, y2=(B[1]+C[1])/2, m2=(B[0]-C[0])/(C[1]-B[1]),
p=linesColition(x1,y1,m1,x2,y2,m2), w=p[0]-A[0], h=p[1]-A[1],
r=Math.sqrt(w*w+h*h);
return p? p.concat(r): false;
}

Y se usa algo así, pasandole los puntos A,B,C. Devuelve un arreglo [x,y,radio]:

circle=getCircleByThreePoints( [-10,-5], [0,-10], [2,-7] );


No hay comentarios.:

Publicar un comentario