Algorithme d'un cercle avec opengl

Résolu
jfk20004 Messages postés 39 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 13 novembre 2004 - 28 août 2004 à 12:45
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!!!

7 réponses

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 août 2004 à 21:02
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();
}
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
28 août 2004 à 13:25
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
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
28 août 2004 à 22:50
waw du TI basic!! toi aussi t'as commencé la prog la dessus?
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
29 août 2004 à 11:44
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
asmanur Messages postés 230 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 4 août 2005
30 août 2004 à 08:54
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
0
mpicart Messages postés 1 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 19 février 2009
19 févr. 2009 à 21:34
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
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
20 févr. 2009 à 00:08
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é ?
0
Rejoignez-nous