Dado un arco arbitrario, donde conoce los siguientes valores: punto final (x1, y1), radio (r) y dirección del arco (por ejemplo, en sentido horario o antihorario de principio a fin), ¿cómo puedo calcular el otro punto final del arco (y Digo punto final porque pienso en un arco como un segmento de línea curvo, que se encuentra en la circunferencia del círculo y tiene dos puntos finales).
Aunque así es como interpreto el problema y tal vez no lo estoy pensando correctamente.
EDITAR: Sí, conozco el punto de origen y la longitud del arco. Lo siento, olvidé mencionar. Además, ese círculo estaría en un plano cartesiano 2D (ejes x e y). Lo siento, falta mi terminología matemática.
Además, no estoy tratando de hacer trampa en la tarea ni nada. Este es un problema legítimo para un gráfico SVG que estoy tratando de crear usando JavaScript y he hecho todo lo posible pero necesito ayuda.
Gracias de antemano.
¡Bienvenido a Math.SE! Aquí está mi boceto para el caso de la dirección de las manecillas del reloj: el punto inicial es
, el punto final que desea es
, y
es el radio de la circunferencia sobre la que se encuentra el arco.
Usaré ángulos polares: puedes ver la descripción en Wikipedia . También se utilizarán las fórmulas para la conversión de polar a cartesiano (en el mismo artículo de wiki).
En la foto, es el ángulo polar de la dirección en la que la curva parte del punto . Dado que cualquier radio de un círculo es perpendicular al círculo, el ángulo polar del vector es . El largo de es . Por lo tanto, sus coordenadas cartesianas son
Estos se pueden reescribir usando algunas identidades trigonométricas, pero no creo que ganaría nada. Como control de cordura, considere lo que sucede cuando
: el vector es cero, por lo tanto
es lo mismo que
. Aparte, si
la curva se convierte en un segmento de línea recta, pero averiguar el límite es un ejercicio de cálculo.:-)
Si la curva se dobla en sentido antihorario, las señales serán diferentes en algunos lugares. Es decir, el ángulo polar de será , por eso
Más tarde: una solución más simple para el caso cuando es dado. Primero, calcule el vector y conviértalo a coordenadas polares usando estas fórmulas . Luego aumente o disminuya el ángulo en , dependiendo de la elección en sentido antihorario/horario.
Como quería JavaScript, hice un jsfiddle y también copié el código a continuación. Los parámetros son las coordenadas de A y C, así como la longitud del arco y la dirección. el radio se calcula dentro de la función.
function findB(Ax, Ay, Cx, Cy, L, clockwise) {
var r = Math.sqrt(Math.pow(Ax - Cx, 2) + Math.pow(Ay - Cy, 2));
var angle = Math.atan2(Ay - Cy, Ax - Cx);
if (clockwise) {
angle = angle - L / r;
}
else {
angle = angle + L / r;
}
var Bx = Cx + r * Math.cos(angle);
var By = Cy + r * Math.sin(angle);
return [Bx, By];
}
document.write(findB(0, 1, 1, 0, 1, true));
dtldarek
Clayton