En realidad no necesitan TRIGS para éste. Simplemente use pendientes, o cambie en x
y y
.
Dada una línea de pendiente m = y/x
, la línea perpendicular a esa línea tiene pendiente -1/m
, o -x/y
.
La pendiente m entre los puntos rojos es -150/150
, o -1/1
. Noté que tu positivo y
puntos abajo.
Por lo tanto, la pendiente positiva es 1/1
. Tus cambios x e y a la misma velocidad, con la misma cantidad.
Una vez que sepa eso, entonces debería ser bastante fácil darse cuenta del resto. Dado que están alineados en un ángulo de 45 grados, la relación de borde del triángulo 45-45-90
es 1 : 1 : sqrt(2)
. Entonces, si su longitud es 20
, el cambio xey individual sería 20/sqrt(2)
, o aproximadamente 14
en números enteros.
Por lo tanto, sus dos puntos amarillos estarían en (36, 236)
, y (64, 264)
. Si las líneas no están alineadas a un grado conveniente, deberá usar arctan()
o algo similar, y obtener el ángulo entre la línea y la línea horizontal, para que pueda calcular la relación de cambio xy y.
Espero que mi respuesta no sea demasiado difícil de seguir. Para una solución más general, vea la respuesta de Troubadour.
Editar: Puesto que la OP dijo que el punto rojo inferior está realmente rotando alrededor del punto rojo superior, necesitaremos una solución más flexible en su lugar.
Voy a extender esta respuesta de Troubadour's, ya que estoy haciendo exactamente lo mismo. Por favor, consulte su publicación mientras lee la mía.
1. Obtener el vector desde el origen (200, 100) para el punto de giro (50, 250):
vector = (200 - 50, 100 - 250) = (150, -150)
2. girar su vector mediante el canje de la x e y, y negar x para obtener el nuevo vector:
vector = (150, -150) => swap => (-150, 150) => negate x => (150, 150)
3. Obtener el vector unitario (de longitud 1) desde el nuevo vector:
vector = vector/length(vector)
= (150/length(vector), 150/length(vector))
~= (0.7071, 0.7071)
where
length(vector) = sqrt(150^2 + 150^2) ~= 212.2320
4. Obtener el vector de desplazamiento de la longitud 20, multiplicando el vector unidad.
displacement_vector = vector * 20
= (0.7071 * 20, 0.7071 * 20)
= (14.1421, 14.1421)
5. /menos este vector a/de su vector de rotación (punto):
yellow_1 = (50, 250) + (14.1421, 14.1421) ~= (64, 254)
yellow_2 = (50, 250) - (14.1421, 14.1421) ~= (36, 236)
espero que los pasos anteriores te ayudan con la formulación de su código. No importa en qué ángulo esté, los mismos pasos.
¿Es verdad para todos sus problemas que estarán alineados a 45 grados? –
lo siento, no estoy seguro de lo que está preguntando. La matemática REALMENTE no es mi fuerte. en el diagrama de arriba, la x: 200, y: 100 actuará como un punto de anclaje. cuando el diagrama está girando, me gustaría saber la fórmula para obtener las coordenadas de los puntos amarillos independientemente del ángulo que estén haciendo los puntos rojos. Espero que tenga sentido. – TheDarkIn1978
Ah, entonces no está fijado en ese ángulo. De acuerdo, es hora de escribir esa solución de vector giratorio! –