¿Cómo podemos calcular el eje de rotación en 3D (Vector3D) a partir del ángulo de una línea en 2D?
Tengo algunas formas en 2D y también tengo modelos 3D creados exactamente por formas 2D que tengo. Ahora quiero rotar mis modelos 3D por la línea de base y estoy utilizando RotateTransform3D y AxisAngleRotation3D. Por lo tanto, necesito el ángulo, el punto central y el Vector3D de los ejes x, y, z.
El ángulo para rotar el modelo hacia arriba siempre es de 90 grados.
También puedo calcular el ángulo de cada línea por la que quiero rotar el modelo 3D (líneas rojas en la imagen de ejemplo) y el punto central en 2D, pero mi pregunta es cómo puedo calcular el eje para indicar por qué eje(s) debe rotar.
var myRotateTransform = new RotateTransform3D(
new AxisAngleRotation3D(
new Vector3D(?, ?, ?), ángulo),
new Point3D(getCenter.X, getCenter.Y, getCenter.Z));
También adjunto aquí una imagen de ejemplo para entenderlo mejor.
Example
Creo que para un ángulo de 0 grados, el Vector3D debe ser (-1,0,0) o para un ángulo de 180 grados, el Vector3D debe ser (1,0,0), pero ¿cómo puedo calcularlo automáticamente?
davy.ai
Para calcular el eje de rotación de tu modelo 3D, necesitarías encontrar el vector normal del plano que contiene la línea alrededor de la cual deseas rotar.
Aquí están los pasos para encontrar el vector normal:
Una vez que tengas el vector normal, puedes utilizarlo como el vector del eje en tu constructor de RotateTransform3D.
Aquí tienes un ejemplo de código:
Ten en cuenta que en este ejemplo, el ángulo de rotación hacia arriba está fijado en 90 grados como se menciona en la pregunta. Además, el Vector3D para rotar alrededor del eje X sería (1,0,0) para 180 grados y (-1,0,0) para 0 grados, como identificaste correctamente.