2010-08-06 22 views
5

Estoy tratando de encontrar la manera de hacerlo. Esencialmente tengo los puntos A y B, que sé la ubicación de. Luego tengo el punto C y el punto D, que solo sé las coordenadas de C. Conozco la longitud de C-D y sé que C-D debe ser paralela a A-B. ¿Cómo podría generalmente resolver D dada A, B, C y la longitud de C-D? Gracias¿Ayuda con este problema?

alt text http://img706.imageshack.us/img706/4494/imgclr.png

+3

necesidades "pertenece en mathoverflow" opción de cerca, aunque probablemente se habían de llama para hacer una pregunta tan sencilla: p – meagar

+1

@meager: Por lo que yo' Como he visto, no se incendiarían, pero podrían ser un poco condescendientes. :-) –

+1

Soy un gran programador, pero mis habilidades matemáticas siempre han sido NULL – jmasterx

Respuesta

9

D = C ± (B-A)/| B-A | * | C-D |

Si B = A no hay solución, ya que la línea AB degenera a un punto y la paraleldad de una línea a un punto no está definida.

Explicación

(B-A)/| B-A | es un vector de dirección de la longitud de la unidad. Multiplicación por la longitud | C-D | da como resultado el vector de compensación adecuado.

Edits: cambiado + a ± para proporcionar ambas soluciones. Caso trivial añadido B = A.

+3

Correcto. También 'C- (B-A)/| B-A | * | C-D |' es una solución (caminando en la dirección opuesta a 'C'). – phimuemue

0

Conociendo la posición de A & B, puede encontrar fácilmente la longitud y la pendiente de la línea AB.

Para colocar D, necesita saber la longitud y la pendiente de la línea CD. Usted ya conoce la longitud, y la pendiente de CD es la misma que la Pendiente de AB, ya que son paralelas.

1

introducir el vector v = A - B. Esta dirección será la misma que la dirección entre C y D. Por lo tanto, D = C + & lambda; v, y solo necesitamos determinar & lambda ;. La distancia entre C y D es conocida, d. Pero la distancia es d = | D - C | = | C + & lambda; v - C | = | & lambda; | v, donde v = | v | es la longitud de v. Por lo tanto | & lambda; | = d/v para que & lambda; = ± d/v.

FYI, la longitud | u | de un vector u = (x, y) está dado por | u | = sqrt (x^2 + y^2), según el teorema de Pitágoras.

0

T (x) es una traducción en el punto x

Si T (a) = c entonces T (B) = d

Básicamente, el trabajo fuera el movimiento requerido para conseguir de A a C y aplicar la misma función a b.

Edit: Aunque técnicamente, a partir de la información que nos proporcionó, solo podía calcular dos posiciones diferentes para d, ninguna. Saber la longitud no es suficiente, d podría ser a cualquier lado de c.

3

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.

+1

Esta es una solución más explícita. Sin embargo, solo es válido para el caso especial R^2. –

+1

@ Peter G .: Esto es cierto. El diagrama de arriba solo estaba en R^2. ;-) Principalmente dejé esta respuesta porque si el OP afirmaba tener habilidades matemáticas NULL no estaba seguro de si sería capaz de traducir necesariamente las soluciones basadas en vectores al código. – Chris

+0

Bueno, la mayoría de las imágenes PNG son planas ... Pero el contenido de la imagen podría muy bien por una imagen en R^3. –

0

Hay dos fórmulas que se aplican aquí.

La primera es pendiente (subida sobre carrera), que = (Yb-Ya)/(Xb-Xa) así como (Yd-Yc)/(Xd-Xc) ya que los segmentos de línea son paralelos.

El segundo es el teorema de Pitágoras, L^2 = (Xd-Xc)^2 + (Yd-Yc)^2, donde L es la longitud dada de C-D.

representación de la pendiente como m y resolver las ecuaciones para punto D's X e Y valores rendimientos (creo) estas dos fórmulas:

Xd = Xc + (L^2/(1 + m^2))^0.5

Yd = Yc + m (Xd - Xc)