Bonjour. Je cherche à calculer l'intersection d'une droite et d'un cylindre fini si elle existe, dans le cadre d'un projet de raytracing.
Le cylindre est centré et unitaire, aligné sur l'axe Oz.
J'en ai déduit son équation : x² + y² = r² = 1.
Je possède la représentation paramétrique de ma droite : { Ox + Dx*t, Oy + Dy * t, Oz + Dz *t}.
J'ai donc injecté ces informations dans l'équation du cylindre. Après développement, j'obtiens l'équation du second degré : (Dx² + Dy²)*t² +2*(DxOx + Dy*Oy)*t + Ox²+Oy² - 1 = 0.
Je la résous (déterminant etc ...) comme si je possédais un cylindre infini. Cela semble bien fonctionner jusque là.
Mon souci vient au moment de calculer l'intersection avec les deux faces du cylindre.
Je pars du principe que : Soit I mon point d'intersection calculé avec O + D * t.
Si Iz < zmin, alors je cherche l'intersection avec la face, pour cela je résous t=(zmin - Oz)/Dz. Si t<0 ou que Ix² + Iy² est supérieur à 1 (rayon²), alors je renvoie faux, sinon j'ai trouvé une intersection avec la face inférieure du cylindre.
Je procède de la même manière avec l'autre face.
Cependant je n'otiens pas les résultats escomptés. Y'a-t-il quelque chose qui semble faut dans mon raisonnement ? Il est vrai que des soucis peuvent apparaître si Dz vaut 0, mais je ne sais pas trop comment gérer ce cas.
Merci pour votre aide
-----