Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

421
Vistas
¿Cómo rotar un vector alrededor de un eje arbitrario?

Tengo un eje, definido por 2 vectores, por ejemplo, uno que apunta hacia arriba en x = 10 :

 const axisStart = new Vector3(10, 0, 0) const axisEnd = new Vector3(10, 0, 1)

Obtengo la dirección del eje normalizado así:

 const axisDirection = new Vector3().subVectors(axisEnd, axisStart).normalize()

¿Cómo puedo rotar un vector (por ejemplo Vector3(50, 0, 0) ) alrededor de mi eje original ?

Intenté usar Vector3.applyAxisAngle(axisDirection , radians) , pero debido a que el eje se ha normalizado, la rotación ocurre alrededor del centro mundial (0, 0) y no alrededor de la posición original del eje.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Resolví esto encontrando el punto exacto en el eje alrededor del cual gira el punto, usando esta respuesta y traduciendo el pseudocódigo a mecanografiado:

 getPivotPoint(pointToRotate: Vector3, axisStart: Vector3, axisEnd: Vector3) { const d = new Vector3().subVectors(axisEnd, axisStart).normalize() const v = new Vector3().subVectors(pointToRotate, axisStart) const t = v.dot(d) const pivotPoint = axisStart.add(d.multiplyScalar(t)) return pivotPoint }

Luego, como señaló @Ouroborus, puedo traducir el punto, aplicar la rotación y volver a traducirlo:

 rotatePointAroundAxis(pointToRotate: Vector3, axisStart: Vector3, axisEnd, radians: number) { const axisDirection = new Vector3().subVectors(axisEnd, axisStart).normalize() const pivotPoint = getPivotPoint(pointToRotate, axisStart, axisEnd) const translationToWorldCenter = new Vector3().subVectors(pointToRotate, pivotPoint) const translatedRotated = translationToWorldCenter.clone().applyAxisAngle(axisDirection, radians) const destination = pointToRotate.clone().add(translatedRotated).sub(translationToWorldCenter) return destination }

El código anterior está funcionando bien, dejándolo aquí para mi yo futuro y para otros que puedan encontrarlo útil.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda