DESPUÉS DE EDITAR:
Me las arreglé para encontrar los errores en mi ecuaciones a continuación. Era una señal de error en uno de los términos (en lugar de +). Haber corregido eso, el método que describo a continuación FUNCIONA, pero NO LO USO ::- D. Mi método es complicado y propenso a errores (como he demostrado, jaja). Las 2 respuestas a continuación ofrecen mucho mejores opciones. hardmath encontrado un par de mis errores y proporciona una forma alternativa de obtención de X2 y Y2 usando el mismo sistema de las fórmulas que se utilizan.
Por otro lado, joriki proporciona una solución alternativa que es MUY eficiente en términos de número de cálculos que deben hacerse cada fotograma. Finalmente, he abandonado por completo mi enfoque y hará uso de su solución.
Gracias hardmath y joriki, y, por todos los medios, Matemáticas @ Pila ::- D. la gente regla! Yo humildemente gracias por ayudar a un programador en peligro!
POST ORIGINAL:
Hola ::- D. yo estoy trabajando en un (Flash) juego y tengo un arma de la que un proyectil sale. El proyectil viaja a lo largo de una línea. Tengo la pendiente de la línea, así como el origen (1 punto). Quiero calcular, en función de la Distancia, donde debo sacar el proyectil, fotograma por fotograma. Aumenta la distancia con una cierta cantidad cada fotograma, como el proyectil viaja a lo largo de la línea.
He intentado mi mejor para solucionar esto y esto es lo que hice hasta ahora. No me importaría si usted sabe de una manera más sencilla, pero me gustaría mucho agradecería si usted me diga por qué mi método no funciona (las coordenadas estoy recibiendo son muy caótico).
He utilizado estas ecuaciones para construir un sistema:
http://www.analyzemath.com/Calculators/TwoPointsCalculator.html
d = sqrt [ (x1 -x2)^ + (y1 - y2)^ ]
m = (y2 - y1) / (x2 - x1)
Saqué y2:
y2 = m * x2 - m * x1 + y1
A partir de esa ecuación, yo lo sé todo, excepto x2. x1, y1 and m are all known
. Estoy a la búsqueda de x2 y y2 que están las coordenadas de mi punto deseado.
He quitado el radical por el cuadrado de la primera ecuación y también romper (problemas) el paranthesis. Debo mencionar que ha sido un largo tiempo desde que no hago matemáticas así que disculpen la falta de la terminología correcta. También, estoy familiarizado con la forma de producir una rápida MathJaX de las ecuaciones, pero creo que estamos lo suficientemente simple para ser escrito normalmente. ^ - los medios de la plaza. He utilizado algunos extra paranthesis.
d^ = x1^ - (2 * x2 * x1) + x2^ + y1^ - (2 * y2 * y1) + y2 ^
Ok, así que también sé que d
es. Ahora, me tomó y2 y la sustituye en la ecuación anterior. Esto es lo que resultó:
d^ = x1^ - 2 * x2 * x1 + x2^ + y1^ - 2 * y1 * (m * x2 + K) + (m * x2 +K) ^
Donde K es la parte que me puede calcular a partir de la anterior y2 ecuación: y2 = m* x2 -m * x1 + y1
Así que ahora tengo una ecuación en la que yo lo sé todo, excepto x2. He reducido esta ecuación para una ecuación cuadrática. La forma final (he resuelto el cuadrado paréntesis anterior) es:
x2^ ( - 1 - m^) + x2 (2 * x1 + 2 * y1 * m - 2 * m * K) + d^ - x1^ - y1^ + 2 * y1 * K - K ^ = 0
Se ve de miedo ¿no? reír.
Este parece ser el correcto. Porque estamos hablando de una recta, la pendiente y la distancia, es obvio que no puede haber DOS puntos de distancia D de mi Origen (x1, y1). Así que me resuelva la ecuación cuadrática para encontrar x2-1 y x2-2, que puedo tomar para mi primera ecuación y obtener y2-1 y y2-2. Así que se trasladó a resolver la ecuación cuadrática. En primer lugar, he encontrado a, b y c).
a = -1 - m^
b = (2 * x1 + 2 * y1 * m - 2 * m * K)
c = d^ - x1^ - y1^ + 2 * y1 * K - K ^
Y ahora, he encontrado la 2 raíces:
x2 = (-b + sqrt (b^ - 4ac)) / 2a
x2 = (-b - sqrt (b^ - 4ac)) / 2a
Entonces, encontré a los dos y2 puntos. Y es así ::- D.
No funciona reír......... He trabajado durante horas de esta mañana, la flexión, lo patético de matemáticas músculos llegué a la izquierda y he trabajado en toda esta lejos de terminar con:
(x=1509141.9643610462, y=20806970.245399687)
Esto, en caso de que el origen está en 200, 250 y la distancia es de 1 y la pendiente es de 2.2 o -0.7 o lo que sea.......
A veces, yo me pongo NaN (No un Número, Un valor no válido en ActionScript 3). Por lo que los valores que me estoy poniendo DEFINITIVAMENTE no están relacionados con mi origen.
Un punto de interés, sin embargo: de la pendiente = 1.380657160570366, mi proyectil en REALIDAD PARECE QUE funciona, como en, parece un poco DEMASIADO lejos del Origen (alrededor de 50 píxeles), pero se MUEVE a lo largo de la línea correcta, aunque, extrañamente, se ACELERA, aunque yo nunca aumentar su velocidad, yo simplemente aumentar la distancia:
_ProjectileDistance += _ProjectileSpeed;
var newCoords: Point = GetPointAlongLine(weaponRootPointX, weaponRootPointY, _ProjectileDistance, _ProjectileSlope);
Projectile.x = newCoords.x;
Projectile.y = newCoords.y;
Y para los que saben de programación, aquí es lo que me dijo se ve como en el código:
var a: Number = - 1 - slope * slope;
var b: Number = 2 * x1 + 2 * y1 * slope - 2 * slope * y2KnownPart;
var c: Number = distance*distance - x1*x1 - y1*y1 - 2 * y1 * y2KnownPart - y2KnownPart*y2KnownPart;
var x2Root1: Number = (- b + Math.sqrt(b*b - 4 * a * c)) / (2 * a);
var x2Root2: Number = (- b - Math.sqrt(b*b - 4 * a * c)) / (2 * a);
var y2Root1: Number = slope * x2Root1 + y2KnownPart;
var y2Root2: Number = slope * x2Root2 + y2KnownPart;
Lo siento por el largo post ::- D. espero que alguien tenga la paciencia de leer hasta esta línea ::- D. Si usted lo hizo, sé que usted está haciendo por una buena causa ::- D. Mi los juegos son gratis, así es mi software, basta con mirar aquí ::- D https://sourceforge.net/users/echysttas