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, fraichement et difficilement (faux) pris de formule mathématique :

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);
    }
}
xo yo etc = x oeil
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 !