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

Signaler
Messages postés
39
Date d'inscription
mercredi 25 août 2004
Statut
Membre
Dernière intervention
13 novembre 2004
-
cs_JCDjcd
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
-
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!!!

7 réponses

Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
2
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();
}
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
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
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008

waw du TI basic!! toi aussi t'as commencé la prog la dessus?
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
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
Messages postés
230
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
4 août 2005

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
Messages postés
1
Date d'inscription
jeudi 19 février 2009
Statut
Membre
Dernière intervention
19 février 2009

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
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
2
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é ?