Pagina 1 di 1
Retta VS Triangolo
Inviato: 06 mar 2007, 17:41
da Red_Rastaman
Salve! Avrei un problemino...
Ho le cordinate dei vertici di un triangolo (in 3d) e una retta perpendicolare al piano "di terra" condotta da un certo punto di cui conosciamo le cordinate.
Vorrei sapere (dando per scontato che la retta interseca il triangolo) le cordinate del punto di intersezione (ovviamente X e Y saranno quelle del punto che ha generato la retta, e ora mi serve Z...)
Spero che questo disegnino vi aiuti a capire. Grazie infinite a chi mi aiuterà!!
Inviato: 06 mar 2007, 17:51
da MdF
Una volta trovata l'equazione del piano per il triangolo non dovrebbe essere difficile, la si mette a sistema con l'equazione della retta e si trova il punto.
Visto che (mi sto chiedendo il perché) so cosa fare ma non so come farlo, non credo di saperti aiutare oltre. Ci studio ma non contar troppo su di me

Inviato: 06 mar 2007, 18:01
da Marco
Un modo furbo è di usare la geometria affine. Chiama X' la proiezione del punto X sul piano Oxy.
Per certi coefficienti a, b, c a somma 1, avrai che
aA + bB + cC = P,
dato che P è complanare.
Le proiezioni mantengono le affinità, quindi, proiettando tutto sul piano Oxy, per gli stessi coefficienti di prima avrai che
aA' + bB' + cC' = P' = H'.
Ma A', B', C', H' sono tutti dati del problema, quindi sai come ricavare a, b e c e quindi P.
Questa è matematica olimpica, però. Lo sposto. M.
Inviato: 06 mar 2007, 18:12
da Red_Rastaman
Marco ha scritto:Un modo furbo è di usare la geometria affine. Chiama X' la proiezione del punto X sul piano Oxy.
Per certi coefficienti a, b, c a somma 1, avrai che
aA + bB + cC = P,
dato che P è complanare.
Le proiezioni mantengono le affinità, quindi, proiettando tutto sul piano Oxy, per gli stessi coefficienti di prima avrai che
aA' + bB' + cC' = P' = H'.
Ma A', B', C', H' sono tutti dati del problema, quindi sai come ricavare a, b e c e quindi P.
Grazie mille per l'aiuto Marco! Ma sfortunatamente non ho mai sentito parlare di geometria affine o robe simili...sono appena in seconda liceo e mi serve risolvere questo problema per un algoritmo che sto scrivendo in c++.
Potresti spiegare con termini...hum...ancora più elementari? Ad esempio, quando usi nell'equazione i punti, ti riferisci alle loro cordinate? Perciò aA sarebbe:
A.X*a , A.Y*a, A.Z*a ?
Inviato: 07 mar 2007, 00:47
da MindFlyer
Esatto. Avevo immaginato che ti servisse per un programma.
Ora, visto che incidentalmente queste cose servono anche a me per un lavoro che sto facendo, ti dò una mano.
Ho calcolato una versione simmetrica della formula e una versione asimmetrica. Poiché quella asimmetrica è meno estetica ma leggermente più veloce computazionalmente, ti propongo quest'ultima:
Codice: Seleziona tutto
x1 = B.x-A.x;
x2 = C.x-A.x;
x3 = A.x-H.x;
y1 = B.y-A.y;
y2 = C.y-A.y;
y3 = A.y-H.y;
z1 = B.z-A.z;
z2 = C.z-A.z;
d1 = x1*y2-y1*x2;
d2 = y1*z2-z1*y2;
d3 = z1*x2-x1*z2;
P.x = H.x;
P.y = H.y;
P.z = (x3*d2+y3*d3)/d1+A.z;
Inviato: 07 mar 2007, 15:00
da Red_Rastaman
Grazie mille per il codice...invece per capire se la retta intercetta o no il triangolo? Qualche idea?
Inviato: 07 mar 2007, 16:41
da MindFlyer
Codice: Seleziona tutto
// Calcola x1, x2, x3, y1, y2, y3 come sopra
p1 = x1*x1+y1*y1;
p2 = x2*x2+y2*y2;
p3 = x1*x2+y1*y2;
p4 = x2*x3+y2*y3;
p5 = x3*x1+y3*y1;
v1 = p3*p5-p1*p4;
v2 = p3*p4-p2*p5;
v3 = p1*p2-p3*p3;
if(((v1>0 && v2>0 && v3>0)||(v1<0 && v2<0 && v3<0)) && v1+v2<v3) // Intercetta
else // Non intercetta
Inviato: 09 mar 2007, 13:38
da MindFlyer
Ho spostato tutto in Informatica, mi sembra più consono.