Algorithme d'un cercle avec opengl [Résolu]

Messages postés
39
Date d'inscription
mercredi 25 août 2004
Statut
Membre
Dernière intervention
13 novembre 2004
- - Dernière réponse : cs_JCDjcd
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
- 20 févr. 2009 à 00:08
quelqu'un peut il me donner le code d'un algo d'un tracé de cercle
utilisant opengl. Par ex
x=r*cos(alpha)+cos(beta);
y=r*sin(alpha)+cos(beta);

j'imagine que je prends un tab[x] et un tab[y] dans lequel je passe les val de r*cos(alpha)+cos(beta).
Le prob est lorsque je passe les tabs dans glvertex je n'obtiens
pas un cercle?où est le prob??MERCI!!!
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
2
3
Merci
http://www.cppfrance.com/code.aspx?ID=19748

une source qui fait des chose comme le cercle, voire en mieux.

Le bout de code interessant :

//------------------------------------------------------------
static void CalcPointTorus(double R,double r,double t,double a,double z)
{
glVertex3d(
            (R + r*cos(a))*cos(t),
            (R + r*cos(a))*sin(t),
            z+r*sin(a)
            );
}
//------------------------------------------------------------
// creer un torus d'axes z de grand rayon <R> et de petit rayon <r>
// le commencement de fait a z=0 et la fin a z=<dz>
void MyCreateTorus(double R,double r,int nVertex,int slices,double angleBegin,double angleEnd,double dz)
{
double theta,stepTheta,oldTheta;
double stepAlpha;
double z,oldZ,stepDz;

stepTheta = (angleEnd - angleBegin)/((double)nVertex);
stepAlpha = 2.*PI/slices;
stepDz  = dz/((double)nVertex);

glBegin(GL_TRIANGLE_STRIP);

oldTheta = angleBegin;
oldZ     = 0.;
z       = stepDz;

for(theta=angleBegin+stepTheta;theta<=angleEnd+EPSILON;theta+=stepTheta)
    {
    double a,b; // alpha,beta

    for(a=0.,b=0.5*stepAlpha;a<=2.*PI+EPSILON;a+=stepAlpha,b+=stepAlpha)
    {
    CalcPointTorus(R,r,oldTheta ,b,oldZ);
    CalcPointTorus(R,r,theta    ,a,z);
    }

    oldTheta    = theta;
    oldZ        = z;
    z       += stepDz;
    }

glEnd();
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 209 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_JCDjcd
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29
0
Merci
c'ets du programme de seconde...
je te le donne en tibasic, je ne connais pas opengl
degree
10->r
for (a,0,360)
cos(a)*r->x
sin(a)*r->y
pt-on(x,y,1);
end

voilavoila
Commenter la réponse de coucou747
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008
0
Merci
waw du TI basic!! toi aussi t'as commencé la prog la dessus?
Commenter la réponse de dletozeun
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29
0
Merci
non j'ai commencé en Qbasic, en sixième... je tibasic, j'ai apris ça en seconde, et je m'en sert encore, même si c'ets pas vraiment un language performant, (pas de fonction, les varaibles numériques sont des floats, on a pas le code ascii des chaines... les variables restent d'un programme a l'autre lent ect...)

j'ai mis ça car je ne sais pas faire de C graphique
Commenter la réponse de coucou747
Messages postés
230
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
4 août 2005
0
Merci
Sinon pour faire un cercle y ' a
void Cercle(int x,int y,int rayon)
{
glPushMatrix();
glBegin(GL_POINTS);
for(double i=0;i<180;i+=0.5)
{
glRotated(0.5,0,0,1);
rayon=-rayon;
glVertex2d(-rayon);
rayon=-rayon;
glVertex2d(-rayon);
}
glEnd();
}
c pour la 2D mais c acilement adaptable 3D
Commenter la réponse de asmanur
Messages postés
1
Date d'inscription
jeudi 19 février 2009
Statut
Membre
Dernière intervention
19 février 2009
0
Merci
Bonjour,

Testez vos codes svp avant de les mettre en ligne  glVertex2d(-rayon); 2d donc 2 valeurs.

Quand à pour tracer un cercle il faut donc R, r, t, a et z. Il y a peut-être plus simple et plus pédagogue ?
static void CalcPointTorus(double R,double r,double t,double a,double z)
{
glVertex3d(
(R + r*cos(a))*cos(t),
(R + r*cos(a))*sin(t),
z+r*sin(a)
);
}

M.Picart
Commenter la réponse de mpicart
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
2
0
Merci
ben plus simple non : le tore est définit pas deux rayons (R et r) ensuite comme c'est une surface il faut deux parametres pour y reperer un point (a et t), et enfin le z c'est une petite translation suivant l'axe Oz (c'était pour faire des helices... voir la source)

Tu ne trouves pas ca limpide ?

Pourquoi faire simple quand on peut faire compliqué ?
Commenter la réponse de cs_JCDjcd