IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Minlibx raytracer cylindre sans fin


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    étudiant @ Epitech
    Inscrit en
    Novembre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : étudiant @ Epitech
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 16
    Par défaut Minlibx raytracer cylindre sans fin
    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 !

  2. #2
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    C'est quoi la question ?

    Je ne connais pas la formule d'un cylindre quelconque, cela dit, ton code a l'air foireux si tu as delta < 0.
    En effet, tu as essayé de prendre la racine carré d'un nombre négatif.
    Et si jamais tu as a = 0, ton programme va certainement planter.

Discussions similaires

  1. [VBA-E]Boucle Wend sans fin ??
    Par frevale dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 26/05/2006, 16h14
  2. C : utilisation de getopt - il boucle sans fin...
    Par moussmouss dans le forum C
    Réponses: 14
    Dernier message: 21/12/2005, 11h35
  3. Boucle sans fin : danger pour le serveur ?
    Par Rémiz dans le forum Langage
    Réponses: 4
    Dernier message: 09/12/2005, 16h52
  4. [SQL SERVER 2000] Fonction utilisateur : boucle sans fin
    Par galinijay dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/09/2005, 16h03
  5. WaitForCompletion sans fin
    Par Brunoo dans le forum DirectX
    Réponses: 3
    Dernier message: 09/09/2004, 18h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo