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

jfk20004 39 Messages postés mercredi 25 août 2004Date d'inscription 13 novembre 2004 Dernière intervention - 28 août 2004 à 12:45 - Dernière réponse : cs_JCDjcd 1138 Messages postés mardi 10 juin 2003Date d'inscription 25 janvier 2009 Dernière intervention
- 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 

Votre réponse

7 réponses

Meilleure réponse
cs_JCDjcd 1138 Messages postés mardi 10 juin 2003Date d'inscription 25 janvier 2009 Dernière intervention - 28 août 2004 à 21:02
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();
}

Merci cs_JCDjcd 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_JCDjcd
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 28 août 2004 à 13:25
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
dletozeun 546 Messages postés vendredi 13 février 2004Date d'inscription 9 janvier 2008 Dernière intervention - 28 août 2004 à 22:50
0
Merci
waw du TI basic!! toi aussi t'as commencé la prog la dessus?
Commenter la réponse de dletozeun
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 29 août 2004 à 11:44
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
asmanur 230 Messages postés mercredi 11 février 2004Date d'inscription 4 août 2005 Dernière intervention - 30 août 2004 à 08:54
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
mpicart 1 Messages postés jeudi 19 février 2009Date d'inscription 19 février 2009 Dernière intervention - 19 févr. 2009 à 21:34
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
cs_JCDjcd 1138 Messages postés mardi 10 juin 2003Date d'inscription 25 janvier 2009 Dernière intervention - 20 févr. 2009 à 00:08
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.