Scomposizione di un quadrilatero in 2 triangoli
Il problema è un po' complesso:
Ho quattro punti in ordine casuale nello spazio 3D.
I quatto punti appartengono allo stesso piano.
Il problema consiste nel creare due triangoli qualunque che abbiano i vertici nei quattro punti, ma che non abbiano sovrapposizione di aree.
Possibile soluzione in R2 (mondo 2D):
se i punti sono tutti su uno stesso piano (XY, XZ o YZ) allora posso utilizzare questo metodo:
Creo un triangolo con i primi tre punti (A,B,C)
Prendo il quarto punto D e considero la sua posizione rispetto a ciascuno degli altri punti (per esempio A) e il segmento formato dagli altri 2 (B,C). Se A sta dalla parte opposta di D rispetto a BC, allora il A è da escludere nella formazione del secondo triangolo.
Per verificare la posizione del punto rispetto al segmento considero il segno della seguente formula:
in cui p0 è un punto e p1p2 sono gli estremi del segmento rispetto al quale devo considerare la posizione.
(p1.X - p0.X) * (p2.Y - p0.Y) - (p2.X - p0.X) * (p1.Y - p0.Y)
se il segno è positivo, il punto è “alla sinistra” del segmento, se è negativo è “alla destra”, se è 0, il punto giace sul segmento.
Per esempio, nella figura sotto C è il punto da escludere perché sta dalla parte opposta di D rispetto al segmento AB.
Avrò così i due triangolo ABC e ABD
Esiste qualcosa di analogo in R3 (mondo 3D) o un altro metodo per giungere ad una soluzione?
[img]c:\image.bmp[/img]
Ho quattro punti in ordine casuale nello spazio 3D.
I quatto punti appartengono allo stesso piano.
Il problema consiste nel creare due triangoli qualunque che abbiano i vertici nei quattro punti, ma che non abbiano sovrapposizione di aree.
Possibile soluzione in R2 (mondo 2D):
se i punti sono tutti su uno stesso piano (XY, XZ o YZ) allora posso utilizzare questo metodo:
Creo un triangolo con i primi tre punti (A,B,C)
Prendo il quarto punto D e considero la sua posizione rispetto a ciascuno degli altri punti (per esempio A) e il segmento formato dagli altri 2 (B,C). Se A sta dalla parte opposta di D rispetto a BC, allora il A è da escludere nella formazione del secondo triangolo.
Per verificare la posizione del punto rispetto al segmento considero il segno della seguente formula:
in cui p0 è un punto e p1p2 sono gli estremi del segmento rispetto al quale devo considerare la posizione.
(p1.X - p0.X) * (p2.Y - p0.Y) - (p2.X - p0.X) * (p1.Y - p0.Y)
se il segno è positivo, il punto è “alla sinistra” del segmento, se è negativo è “alla destra”, se è 0, il punto giace sul segmento.
Per esempio, nella figura sotto C è il punto da escludere perché sta dalla parte opposta di D rispetto al segmento AB.
Avrò così i due triangolo ABC e ABD
Esiste qualcosa di analogo in R3 (mondo 3D) o un altro metodo per giungere ad una soluzione?
[img]c:\image.bmp[/img]
Risposte
Ciao,
indipendentemente dalla figura che volevi mostrare, CREDO che il discorso non cambi.
Basta che i due punti A e D sono opposti al segmento BD su uno solo dei tre piani (XY, XZ, YZ). (Segni opposti da formula)
Penso che questa sia una condizione sufficiente per non intrecciare i lati dei triangoli.
Se invece le figure che vuoi considerare in 3D sono piramidi a base triangolare si puo' estendere la formula considerando p0 come punto vertice e p1p2p3 come base triangolare per sapere se tale punto si trova da un lato o dall'altro della base triangolare.
Su due piedi non riesco a buttar giu' una formula.
Se ti interessa, magari domani ci dedichero' un po di tempo.
Buona notte,
EugenioA
indipendentemente dalla figura che volevi mostrare, CREDO che il discorso non cambi.
Basta che i due punti A e D sono opposti al segmento BD su uno solo dei tre piani (XY, XZ, YZ). (Segni opposti da formula)
Penso che questa sia una condizione sufficiente per non intrecciare i lati dei triangoli.
Se invece le figure che vuoi considerare in 3D sono piramidi a base triangolare si puo' estendere la formula considerando p0 come punto vertice e p1p2p3 come base triangolare per sapere se tale punto si trova da un lato o dall'altro della base triangolare.
Su due piedi non riesco a buttar giu' una formula.
Se ti interessa, magari domani ci dedichero' un po di tempo.
Buona notte,
EugenioA