Esta respuesta es similar a algunos otros, pero creo que explica las matemáticas más y debe permitir que usted pueda incorporar en un programa más fácilmente.
se puede encontrar el gradiente de la línea "conocido" al hacer (Ay-By)/(Ax-Bx)
(donde Ay
es la coordenada Y de A
, etc.). Le acaba de llamar a este M
ya que es totalmente calculable.
Si las dos líneas son paralelas a continuación, se puede calcular la pendiente de la otra línea de la misma manera:
gradiente = (Cy-Dy)/(Cx-Dx) = M
Qué reorganiza a (Cy-Dy) = M*(Cx-Dx)
también sabemos que C->D
tiene una longitud determinada (vamos a llamarlo L). Así que podemos decir
(Cy-Dy)^2+(Cx-Dx)^2 = L^2
Usando la ecuación de gradiente podemos sustituir para obtener:
(M^2+1)(Cx-Dx)^2 = L^2
Dado que sabemos lo que M, L y Dx son podemos resolver fácilmente este:
Cx = ((L^2)/(M^2+1))^0.5 + Dx
entonces podemos utilizar este valor de Cx
junto con cualquiera de las ecuaciones (Gradiente es probablemente más fácil) para obtener Cy
.
Cabe destacar que la última ecuación tiene una raíz cuadrada que puede ser positiva o negativa, por lo que obtendrá dos valores posibles de Cx
y, por lo tanto, dos valores posibles de Cy
. Este es el equivalente de moverse en las dos direcciones opuestas en la línea paralela de D
.
Editar:
Como se señaló en los comentarios esta fallará si la línea es vertical (es decir Ax-Bx = 0
). Tendría que este caso especial, pero en este caso la respuesta se convierte en un caso trivial de apenas añadiendo o restando su longitud desde el valor de Cy.
necesidades "pertenece en mathoverflow" opción de cerca, aunque probablemente se habían de llama para hacer una pregunta tan sencilla: p – meagar
@meager: Por lo que yo' Como he visto, no se incendiarían, pero podrían ser un poco condescendientes. :-) –
Soy un gran programador, pero mis habilidades matemáticas siempre han sido NULL – jmasterx