Domanda

Volevo calcolare l'angolo tra due triangoli nello spazio 3D.I due triangoli condividerà sempre esattamente due punti.ad es.

Triangolo 1:

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

Triangolo 2:

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

C'è un modo per calcolare l'angolo tra di loro in modo efficiente in CUDA?

È stato utile?

Soluzione

Per ogni piano, è necessario costruire è vettore normale (perpendicolare a tutte le linee di quel piano). Il modo più semplice per farlo è di prendere il prodotto incrociato di due linee non parallele nel triangolo. (Ex (P3-P1) X (P2-P1) e (P4-P1) X (P2-P1).

Normalizzare quelli.

Il prodotto scalare dei due vettori di direzione vi dà il coseno dell'angolo.

La parte difficile è quello di guardare fuori per triangoli degeneri! Se tutti e 3 i punti che definiscono sia triangolo sono collineari, (quel triangolo è solo una linea), allora quello che stai chiedendo non è definito, e il cross-prodotto dividere per zero. È necessario decidere che cosa avete intenzione di fare in quel caso.

Dal momento che si sta cercando di fare questo su una GPU, ti idealmente vuole scrivere questa funzione senza diramazioni, se siete preoccupati per l'efficienza. Ciò significherebbe, invece di test per i triangoli degenerati con una clausola if, si dovrebbe cercare di farlo con un A ? B : C ternario

Altri suggerimenti

L'angolo tra i triangoli è la stessa come l'angolo tra i piani definiti da tre punti di ogni triangolo.

Dal momento che sia il Punto 1 o il Punto 2 si trovano in entrambe i piani, a capire la direzione semplici da uno di quei punti, Punto 3, e quindi il Punto 4.Quindi, il coseno dell'angolo tra queste due linee è la somma dei prodotti della direzione corrispondente coseno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top