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