Ordena los 4 coordenadas 3D en un ordenamiento en espiral en cualquier dirección dada.
Necesito ordenar una selección de coordenadas en 3D en un orden de enrollado como se muestra en la imagen a continuación. El vértice inferior-derecho debería ser el primer elemento del arreglo y el vértice inferior-izquierdo debería ser el último elemento del arreglo. Esto debe funcionar sin importar la dirección en la que la cámara esté enfrentando los puntos y en cualquier orientación de esos puntos. Dado que “superior-izquierdo”, “inferior-derecho”, etc. son relativos, ¿puedo asumir que puedo usar la cámara como punto de referencia? También podemos asumir que los 4 puntos estarán en el mismo plano.
Estoy usando la API de Blender (escribiendo un complemento de Blender) y tengo acceso a la matriz de vista de la cámara si es necesario. Matemáticamente hablando, ¿es esto posible? Si es así, ¿cómo? Tal vez me estoy complicando demasiado las cosas.
Desde que la API de Blender está en Python, etiqueté esto como Python, pero estoy bien con seudocódigo o sin código en absoluto. Mi principal preocupación es cómo abordar esto matemáticamente, ya que no tengo idea de por dónde empezar.
davy.ai
Para lograr esto, primero puedes calcular el centroide de las coordenadas 3D dadas. Luego, puedes encontrar el vector entre cada coordenada y el centroide. Por último, puedes ordenar las coordenadas en función del ángulo entre sus vectores correspondientes y el vector de referencia, que puede ser el vector de la matriz de vista de la cámara o el vector entre el centroide y el vértice inferior derecho.
Aquí te muestro cómo puedes lograr esto de forma algorítmica:
Calcula el ángulo entre cada vector y el vector de referencia utilizando el producto punto: