Bonjour !
Je viens vers vous cette fois pour un "petit" problème que je ne suis pas obligé de résoudre, mais ça m'embête de laisser ça comme ça.
Entrons dans le vif du sujet : j'essaie de dessiner un cylindre pour un projet de raytracing, et le souci rencontré est le suivant : mon cylindre n'a pas de limite, il part du haut de ma fenêtre vers le bas.
Je sais que j'ai bien un cylindre quand j'ajoute un plan. Quand le cylindre coupe le plan il a bien sa forme arrondi du disque qui le délimite.
Voilà mon code propre au cylindre, fraichementet difficilement(faux) pris de formule mathématique :
xo yo etc = x oeil
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 int inter_cylindre(t_draw *draw) { double a; double b; double c; double k1; double k2; double delta; a = (draw->Vx * draw->Vx) + (draw->Vy * draw->Vy); b = 2 * (draw->xo * draw->Vx) + (draw->yo * draw->Vy); c = (draw->xo * draw->xo) + (draw->yo * draw->yo) - (draw->R * draw->R); delta = (b * b) - (4 * a * c); k1 = (-b + sqrt(delta)) / (2 * a); k2 = (-b - sqrt(delta)) / (2 * a); if (delta < 0) { draw->ks = -1; return (0); } else { if ((k1 >= k2) && (k2 >= 0)) draw->ks = k2; else if ((k1 <= k2) && (k1 >= 0)) draw->ks = k1; return (1); } }
les k sont là pour délimiter quel objet sera tracé en premier (si le k du cylindre est plus petit que celui du plan, il sera tracé avant etc).
Voilà, si vous avez des idées, n'hésitez pas, car je ne trouve pas.
Merci d'avance !
Partager