Pregunta

quería calcular el ángulo entre dos triángulos en el espacio 3D. Los dos triángulos siempre compartirán exactamente dos puntos. por ejemplo.

Triángulo de 1:

Point1 (x1, y1, z1),  
Point2 (x2, y2, z2),   
Point3 (x3, y3, z3).  

Triángulo de 2:

Point1 (x1, y1, z1),  
Point2 (x2, y2, z2),  
Point4 (x4, y4, z4).

¿Hay una manera de calcular el ángulo entre ellos de manera eficiente en CUDA?

¿Fue útil?

Solución

Para cada plano, es necesario construir es vector normal (perpendicular a todas las líneas en ese plano). La forma más sencilla de hacerlo es tomar el producto cruzado de dos líneas no paralelas en el triángulo. (Ex (P3-P1) X (P2-P1) y (P4-P1) X (P2-P1).

Normalizar los.

El producto escalar de los dos vectores de dirección le da el coseno del ángulo.

El poco complicado es tener cuidado con los triángulos degenerados! Si los 3 puntos que definen bien triángulo son colineales, (ese triángulo es sólo una línea), entonces lo que estamos pidiendo es indefinido, y el producto cruzado se dividir por cero. Ahora tenemos que decidir lo que vamos a hacer en ese caso.

Puesto que usted está tratando de hacer esto en una GPU, se le idealmente quiere escribir esta función, sin ramificaciones, si usted está preocupado acerca de la eficiencia. Eso significaría que en lugar de las pruebas de triángulos degenerados con una cláusula if, usted debe tratar de hacerlo con un ternaria A ? B : C

Otros consejos

El ángulo entre los triángulos es el mismo que el ángulo entre los planos definidos por los tres puntos de cada triángulo.

Dado que tanto el punto 1 o el punto 2 se encuentran en ambos planos, averiguar los cosenos de dirección de uno de esos puntos con el punto 3, y luego al punto 4. A continuación, el coseno del ángulo entre estas dos líneas es sólo la suma de los productos de los correspondientes cosenos de dirección.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top