Retta VS Triangolo
- Red_Rastaman
- Messaggi: 3
- Iscritto il: 06 mar 2007, 17:37
Retta VS Triangolo
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à!!
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à!!
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
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
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.
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.
[i:2epswnx1]già ambasciatore ufficiale di RM in Londra[/i:2epswnx1]
- - - - -
"Well, master, we're in a fix and no mistake."
- - - - -
"Well, master, we're in a fix and no mistake."
- Red_Rastaman
- Messaggi: 3
- Iscritto il: 06 mar 2007, 17:37
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++.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.
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 ?
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:
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;
- Red_Rastaman
- Messaggi: 3
- Iscritto il: 06 mar 2007, 17:37
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