1 votos

Ayuda con la fórmula de la línea y la búsqueda de un nuevo punto dada la distancia

Estoy trabajando con un juego y dibujando líneas en la pantalla. Tengo una línea dada por dos puntos A(x1, y1) y B(x2, y2). Quiero encontrar el nuevo punto C(x3,y3) que esté más cerca del punto A que del B.

Así, por ejemplo, si la longitud de la recta A,B es 20 (los valores conocidos), quiero encontrar el punto C tal que la longitud de la recta A,C sea 15.

Tengo este semi-funcionamiento en el juego hasta ahora sin embargo creo que me estoy tropezando con un detalle muy pequeño ya que funciona pero sólo si trazo la línea en ciertos cuadrantes (como 30,30 y 45,15). ¿Puede alguien indicarme dónde está el fallo? ¿Es que el sistema de coordenadas del juego es diferente del eje tradicional en matemáticas (0,0 es arriba a la izquierda e y aumenta desde arriba)?

Mis cálculos actuales son los siguientes:

c = current length of line
n = amount to subtract from current length
slope = (y2-y1)/(x2-x1)
t = arctan(slope)
x3 = x1 + ((c-n) * cos(t))
y3 = m * (x - x1) + y1

A continuación, trazo la línea

x, y, x3, y3

Donde x,y es mi punto de partida original para la línea (sin cambios).

3voto

Andrew Puntos 140

He aquí una idea más simple: represente su nuevo punto $C$ en la siguiente paramétrico forma:

$$(1-t)\begin{pmatrix}x_1\\y_1\end{pmatrix}+t\begin{pmatrix}x_2\\y_2\end{pmatrix}$$

donde $0\leq t \leq 1$ tal que se tiene el punto $\begin{pmatrix}x_1\\y_1\end{pmatrix}$ when $t=0$ and the point $\begin{pmatrix}x_2\\y_2\end{pmatrix}$ cuando $t=1$ . Su tarea ahora es encontrar el valor $t^\prime$ tal que la longitud desde $t=0$ a $t=t^\prime$ es $c-n$ .

Por suerte, la distancia desde $t=0$ a $t=t^\prime$ es fácil deducir:

$c-n=t^\prime \sqrt{(x_2-x_1)^2+(y_2-y_1)^2}$

cuya derivación dejo como ejercicio. Resolver el valor de $t^\prime$ , sustitúyelo en la expresión paramétrica y tendrás el punto deseado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X