Bonjour à tous,
je suis entrain de travailler sur un Ray Traycer en C++ et je me trouve devant un problème qui me laisse perplexe.
J'ai passé une bonne partie de ma matinée à chercher la solution, y compris sur le net, sans trouver.
Le problème se résume simplement:
Je cherche à trouver l'intersection d'un plan et d'une droite.
Ayant la droite sous forme parametrée:
p(t)= {p1 + d1*t,p2 + d2*t, p3 + d3*t},
avec P(p1,p2,p3) un point connu de la droite, et d(d1,d2,d3) un vecteur directeur de la droite.
et l'équation du plan:
ax+by+cz +h =0, avec n=(a,b,c) le vecteur normal du plan.
En testant a plusieures reprises mon programme qui marche en général, je suis tombée sur "l'exception" suivante qui me pose problème.
j'ai choisi un vecteur directeur de la droite d=(3,-4,1).
Or en suivant mon calcul qui est le suivant:
a*(p1+d1*t) + b(p2 + d2*t) + c(p3 +d3*t) +h =0
et après simplification,
t=(-h -a*p1 -b*p2 -c*p3)/(d1+d2+d3) ou t=-(h+ (n dot d)/(d1+d2+d3)
j'arrive à une bête division par 0 car dans mon cas (d=(3,-4,1)) la somme d1 + d2 +d3 =0.
Ce problème survient surtout, peu importe le plan que je cherche à intersecter.
Y a-t-il donc un autre moyen de calculer l'intersection, ou comment faire pour trouver t dans ces cas là? Car en cherchant par exemple l'intersection avec le plan Oxy, en posant z=0, je peut trouver sans problème le paramètre t analytiquement.
Enfin, voilà mon problème, il me laisse surtout perplexe, car le poser me paraît tout simple, alors que le résoudre (comme bien souvent^^) se révèle être un peu plus corsé.
Merci d'avance pour le temps consacré,
cordialement
miro
Partager