Tanto el punto rojo como la circunferencia se pueden arrastrar.
Para hacerlo, sabiendo las coordenadas del punto rojo y del centro de la circunferencia, he calculado la ecuación de la recta que los une y la ecuación de la circunferencia y al igualarlas me ha dado dos soluciones donde elijo una de ellas en función de la posición del punto rojo y de la circunferencia. Las coordenadas de la y las paso primero a negativas para hacer los cálculos y luego a positiva por la estructura que siguen las coordenadas en Flash.
El punto azul tiene este código:
Código :
onEnterFrame = function(){
//Da la pendiente de la recta y su posición, es decir m y a según la ecuación mx+a, en función de dos puntos
recta=calcularRecta(_root.circ._x,_root.circ._y,_root.punto_P._x,_root.punto_P._y);
x0=_root.circ._x;
y0=-_root.circ._y;
m=recta[0];
a=recta[1];
r=60;
//Calcula los dos puntos de corte
corte1=-(m*a-x0-y0*m+Math.sqrt(-2*m*a*x0+2*x0*y0*m-y0*y0-a*a+r*r+2*y0*a-m*m*x0*x0+m*m*r*r))/(1+m*m);
corte2=-(m*a-x0-y0*m-Math.sqrt(-2*m*a*x0+2*x0*y0*m-y0*y0-a*a+r*r+2*y0*a-m*m*x0*x0+m*m*r*r))/(1+m*m);
//Elige una solución
if(_root.punto_P._x>_root.circ._x)
sol=corte2;
else
sol=corte1;
this._y=-(m*sol+a);
this._x=sol;
}
function calcularRecta(x0:Number,y0:Number,xactual:Number,yactual:Number):Array{
var r:Array = new Array;
r[0] = Math.tan((y0-yactual)/(xactual-x0));
r[1] = -(r[0] * x0 + y0);
return r;
}El caso es que funciona bien cuando la recta tiene poco ángulo pero cuando supera un ángulo más o menos de 45º ya el punto no se coloca donde debe.
Aquí está la aplicación para quien la quiera probar: http://www.gamegum.com/game/6383/punto-de-corte/
Necesito solucionar esto porque lo utilizo para un juego que estoy creando y que podeis probar ya, aunque tiene este fallo, aquí:
http://rapidshare.com/files/241032231/Battles_of_Civilizations.rar.html
