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

Mathématiques Discussion :

Algorithme de tracé de sphère


Sujet :

Mathématiques

  1. #1
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut Algorithme de tracé de sphère
    Bonjour tlm,

    Dans un projet de moteur 3D, je dois intégrer des formes de base comme la sphère. Seul problème : même en partant de la formule d'une sphère, je n'arrive pas à trouver l'algorithme pour en tracer une. Quelqu'un saurat-il où je peux trouver des infos ou m'aider pour l'algo ? Merci d'avance


    Nico.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut
    sphère trois dimensions --> chaque point répond à l'équation en x, y, z x²+y²+z² = R², ou R est le rayon de la sphère centrée en (0,0,0). Vous avez donc trois valeurs pour chaque coordonnée qui répondent à cette équation.

    L'algo est le même que celui de n'importe quel cours de mathématiques : pour x et y fixés, on fait varier z. Quelles valeurs prend-il ? soit x²+y² = 0 => x = y = 0 z varie de -R à +R, et ainsi de suite. fixez une nouvelle valeur pour y pour avoir chaque nouvelle gamme de variation de z avec y fixé et x = 0, et ainsi de suit, jusqu'à z=0 et y=+ ou - R, puis ...

    compilqué x=rcos(phi)sin(teta) y =rcos(phi)cos(teta) z=rsin(phi) est déjà mieux. phi va de -pi/2 à pi/2, teta de 0 à 2pi, r=cste fixez votre nombre de point, etc

    Pour l'algorithme, le plus pratique est d'avoir toutes les coordonnées en fonction d'une seule des trois valeurs, mais en 3D c'est assez difficile, c'est pour ça. calculer les coordonnées des points sur chaque cercle à z fixé (allant de -R à R) me semble être une bonne solution.

    Ça permet de connaître le nombre de points : nombre de cercles multiplié par nombre de points sur chaque cercle

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Je suppose que tu veux creer ta sphere avec des facettes. Dans ce cas, il faut utiliser l'equation d'une sphere dans un repere polaire.

    Sphere de rayon R: (R,theta,phi)

    avec
    -90 <= theta <= 90
    0 <= phi <= 360

    O on peut calculer une facette a 4 coins avec 4 coordonnées:

    (R,theta,phi)
    (R,theta+dtheta,phi)
    (R,theta+dtheta,phi+dphi)
    (R,theta,phi+dphi)

    dtheta et dphi sont les increments d'angles. Ca va conditionner la taille de la facette et donc la "spheritude" de la sphere.

    La formule de changement de repere polaire/cartesien est

    (R,theta,phi) -> (x,y,z)

    avec
    x = cos(theta)*cos(phi)*R
    y = cos(theta)*sin(phi)*R
    z = sin(theta) *R

    Edit: grillé !

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut
    l'avantage des coordonnées sphériques est que les variables sont non liées. Ainsi, deux boucles "for" imbriquées et une valeur de R fixée permettent de construire avantageusement tous les points désirés en coordonnées cartésiennes par les formules que pseudocode a donné.

    en matlab, ça donnerait quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for phi = 1:360
       for teta = -90:0.5:90
          %bla bla
          %calcul des coordonnées cartésiennes
          %et stockage
       end
    end

  5. #5
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Tout d'abord, merci pour vos réponses, j'y vois un peu plus clair. Le problème que je rencontre maintenant est lié à ma structure de données. En effet, je dois stocker une seule fois chaque sommet lors de mon parcours sur la double boucle ...

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut
    où est le problème ? Soit vous faites un tableau à deux dimensions, soit vous faites 3 tableaux, un pour les x, un pour les y et un pour les z, avec un indice de boucle indépendant qui marque chaque itération. Dans l'exemple, ce serait un entier allant de 0 à 360² ça fait des tableaux immenses, mais bon. Le stockage se fait évidemment à chaque fois dans la boucle for intérieure, avec quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    tab_x[i_general]=cos(teta)*cos(phi)*R;
    tab_y[i_general]=cos(teta)*sin(phi)*R;
    tab_z[i_general]=sin(teta) *R;
    i_general]++;
    Attention quand même, les arguments des fonctions cos et sin sont exprimés en radians avec le langage C.

    Quel est le langage que vous utilisez ? Car avec openGL, ce sont les quadrics (quadrics ?) qui forment les objets à géomètrie 3D, sans passer par des constructions algorithmiques des surfaces.

  7. #7
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Le problème est bien lié à ma structure de données. Je dois faire un moteur 3D from scratch, c-à-d sans utiliser d'API (genre OpenGL ou Java3D).

    Lorsque je créé une nouvelle forme 3D, je dois créér l'ensemble des points + les facettes dans la même boucle. Un point possède 3 coordonnées. Une facette possède 3 entiers se référant aux indices des points insérés.

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par nicolas66
    Le problème est bien lié à ma structure de données. Je dois faire un moteur 3D from scratch, c-à-d sans utiliser d'API (genre OpenGL ou Java3D).
    cool. c'est toujours sympa de reinventer la roue...

    Citation Envoyé par nicolas66
    Lorsque je créé une nouvelle forme 3D, je dois créér l'ensemble des points + les facettes dans la même boucle. Un point possède 3 coordonnées. Une facette possède 3 entiers se référant aux indices des points insérés.
    Oops ! Vous venez d'inventer le "vertex". C'est en contradiction avec le "from scratch".

    Bon, sans rire, créer les vertex et les faces dans la meme boucle c'est assez facile.

    Etant donné que le pas de la boucle "teta" est constant, chaque "etage" de la sphere est composé du meme nombre de point: appelons le N. Donc, pour chaque étage (= chaque phi), on crée N nouveaux vertex dans la boucle teta.

    Maintenant pour les faces, il faut prendre un couple de 2 vertex consecutifs, par exemple (V[i], V[i+1]). On prend egalement les 2 vertex consecutifs de l'etage précédent (V[i-N], V[i-N+1]). On crée alors la face en rejoignant les 4 vertex. (ou plus generalement on créé 2 triangles accolés)

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/07/2012, 15h54
  2. Tracé de plusieurs sphères
    Par mecaplus dans le forum MATLAB
    Réponses: 13
    Dernier message: 28/03/2010, 10h38
  3. Réponses: 12
    Dernier message: 11/11/2007, 16h04
  4. Algorithme de tracé d'une étoile à 5 branches
    Par onlytoine dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 14/10/2005, 17h50
  5. Algorithme de randomisation ... ( Hasard ...? )
    Par Anonymous dans le forum Assembleur
    Réponses: 8
    Dernier message: 06/09/2002, 14h25

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