Zazour
Messages postés120Date d'inscriptionmercredi 7 mai 2003StatutMembreDernière intervention14 janvier 2006
-
5 mars 2005 à 12:33
Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 2015
-
14 juil. 2005 à 13:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Tu pourras télécharger la même version de Glut que moi. Normalement il n'y aura plus de problèmes de compilation.
Ne pas oublier de faire projet=>Options du Projets=>Paramètres=>éditeur de liens:
-lopengl32
-lglut32
-lglu32
avant de compiler.
gabriel_jm
Messages postés3Date d'inscriptionmardi 12 juillet 2005StatutMembreDernière intervention18 juillet 2005 12 juil. 2005 à 17:29
bonjour,
en fait j'ai essayé de faire marcher ce code chez moi, mais devcpp ne reconnait pas les fonctions glut, alors que dois je faire?
merci
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 9 avril 2005 à 12:51
tes arbres sont en 3D. c'est super beau, mais forcément t'as bcp de code pr le rendering.
cs_Lightness1024!
Messages postés162Date d'inscriptionjeudi 15 mars 2001StatutMembreDernière intervention 1 avril 2005 2 avril 2005 à 12:48
moi aussi dernierement j'ai progé un générateur d'arbres procéduraux. voir:
Très bonne remarque de Kirua sur le continue. Moi qui le trouvait sale, preuve que parfios mieux vaut l'utiliser.
Ce serait bien un executable, mon glut marche pas sous GCC... (manque GLUT_RGB et GLUT_SINGLE)
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 5 mars 2005 à 18:22
Ben, seed détermine la séquence de chiffres ... d'habitude on met time(NULL) cmme valeur, comme ça ça change à chaque exécution. Mais c'est pas anormal que les arbres soient sensiblement pareils.
Zazour
Messages postés120Date d'inscriptionmercredi 7 mai 2003StatutMembreDernière intervention14 janvier 2006 5 mars 2005 à 14:51
la variable seed n'est pas trés significative,que je mette 1 ou 100000 c'est pareil,c'est normal ?
Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 20152 5 mars 2005 à 14:25
Kirua,
Tout simplement un grand merci pour tes explications. Je vais tester ça.
Merci encore.
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 5 mars 2005 à 14:05
C'est pas bien compliqué, il y a deux mots à retenir:
continue et
break
Ça ne fonctionne que dans le cadre d'une boucle (while / for), et dans le cas de break ça fonctionne aussi avec les switch.
L'effet est simple:
continue: arrête l'exécition de la boucle et la fait tout de suite passer à l'itération (le bouclage) suivante. exemple:
for(int i = 1; i <= 10; ++i)
{
if(i == 5)
continue;
cout << i;
}
ce code affiche:
1
2
3
4
//il manque 5
6
7
8
9
10
quand on est arrivé à 5, on est tout de suite passé à 6 sans l'écrire.
Pour break, c'est un peu différant: on ne passe pas à l'itération suivante: on quitte la boucle (on la "casse" = break en anglais):
for(int i = 1; i <= 10; ++i)
{
if(i == 5)
break;
cout << i;
}
ce code affiche:
1
2
3
4
Et c'est tout ! Bien sûr, ce code est idiot, mais comme ça tu vois. Concrètement, pour ton code on va faire comme ça:
if (r<=0.1)
{
xn = 0.05*x;
yn = 0.6*y;
continue;
}
if(r<0.2)
{
xn = 0.05*x;
yn = -0.5*y+1.0;
continue;
}
if (r<0.4)
{
xn = 0.46*x-0.32*y;
yn = 0.39*x+0.38*y+0.6;
continue;
}
...
Tu vois: on évite chaque fois un test de plus! Mais attention, on a oublié ceci:
glBegin(GL_POINTS);
glVertex2f(xn,yn);
x = xn;
y = yn;
glEnd();
En fait, tu aurais dû appeler le glBegin() avant la for, et le glEnd() après la for. tu aurais aussi dû appeler le glVertex2f() dans chaque if(), et comme ça tu n'aurais pas eu de souci :) je te laisse modifier ça, ça devrait être sensiblement plus rapide.
Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 20152 5 mars 2005 à 13:57
Très bonne remarque Kirua à propos de drand48. Je n'y avais pas pensé.
Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 20152 5 mars 2005 à 13:53
Kirua,
Désolé de ne pas contribuer à ta guérison (lol). J'ai déjà entendu parlé de "continue" mais je ne l'ai jamais utilisé.
En cas si tu peux expliciter son utilisation, ça serait bien.
Merci encore pour tous vos commentaires.
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 5 mars 2005 à 13:51
tu devrais quand même déclarer des constantes et pas des defines.
quoique... en fait t'as tout fait en C apparemment, mais si d'aventure tu te mettais au C++ ;)
Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 20152 5 mars 2005 à 13:46
Salut,
En fait, la variable seed sert de générateur de nombres pseudo-aléatoires que l'on va utiliser avec la fonction srand48 ici dans mon programme.
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 5 mars 2005 à 13:42
Superbe fractale :) ça faisait un moment que je n'étais plus capable de regarder un arbre sans y voir une fractale, tu ne m'aides pas sur la voie de la guérison :)
Pour ta grande for: tu peux mettre une continue; à la fin de chaque if()..., ça te permet de ne pas devoir faire deux tests dans toutes tes if. tu vois ce que je veux dire ou je dois expliciter?
Zazour
Messages postés120Date d'inscriptionmercredi 7 mai 2003StatutMembreDernière intervention14 janvier 2006 5 mars 2005 à 12:33
super ton arbre,mais a quoi sert la variable seed?
14 juil. 2005 à 13:47
Gabriel_JM essais d'aller jeter un coup d'oeil sur ce site:
http://www.dil.univ-mrs.fr/~garreta/generique/autres/OGL/
Tu pourras télécharger la même version de Glut que moi. Normalement il n'y aura plus de problèmes de compilation.
Ne pas oublier de faire projet=>Options du Projets=>Paramètres=>éditeur de liens:
-lopengl32
-lglut32
-lglu32
avant de compiler.
12 juil. 2005 à 17:29
en fait j'ai essayé de faire marcher ce code chez moi, mais devcpp ne reconnait pas les fonctions glut, alors que dois je faire?
merci
9 avril 2005 à 12:51
2 avril 2005 à 12:48
http://serhum.epsylon.org/arbres14.png
par contre je sais pas comment tu peux faire le tiens en si peu de lignes, le miens en fait 1000.
17 mars 2005 à 18:45
:)
11 mars 2005 à 19:09
Ce serait bien un executable, mon glut marche pas sous GCC... (manque GLUT_RGB et GLUT_SINGLE)
5 mars 2005 à 18:22
5 mars 2005 à 14:51
5 mars 2005 à 14:25
Tout simplement un grand merci pour tes explications. Je vais tester ça.
Merci encore.
5 mars 2005 à 14:05
continue et
break
Ça ne fonctionne que dans le cadre d'une boucle (while / for), et dans le cas de break ça fonctionne aussi avec les switch.
L'effet est simple:
continue: arrête l'exécition de la boucle et la fait tout de suite passer à l'itération (le bouclage) suivante. exemple:
for(int i = 1; i <= 10; ++i)
{
if(i == 5)
continue;
cout << i;
}
ce code affiche:
1
2
3
4
//il manque 5
6
7
8
9
10
quand on est arrivé à 5, on est tout de suite passé à 6 sans l'écrire.
Pour break, c'est un peu différant: on ne passe pas à l'itération suivante: on quitte la boucle (on la "casse" = break en anglais):
for(int i = 1; i <= 10; ++i)
{
if(i == 5)
break;
cout << i;
}
ce code affiche:
1
2
3
4
Et c'est tout ! Bien sûr, ce code est idiot, mais comme ça tu vois. Concrètement, pour ton code on va faire comme ça:
if (r<=0.1)
{
xn = 0.05*x;
yn = 0.6*y;
continue;
}
if(r<0.2)
{
xn = 0.05*x;
yn = -0.5*y+1.0;
continue;
}
if (r<0.4)
{
xn = 0.46*x-0.32*y;
yn = 0.39*x+0.38*y+0.6;
continue;
}
...
Tu vois: on évite chaque fois un test de plus! Mais attention, on a oublié ceci:
glBegin(GL_POINTS);
glVertex2f(xn,yn);
x = xn;
y = yn;
glEnd();
En fait, tu aurais dû appeler le glBegin() avant la for, et le glEnd() après la for. tu aurais aussi dû appeler le glVertex2f() dans chaque if(), et comme ça tu n'aurais pas eu de souci :) je te laisse modifier ça, ça devrait être sensiblement plus rapide.
5 mars 2005 à 13:57
5 mars 2005 à 13:53
Désolé de ne pas contribuer à ta guérison (lol). J'ai déjà entendu parlé de "continue" mais je ne l'ai jamais utilisé.
En cas si tu peux expliciter son utilisation, ça serait bien.
Merci encore pour tous vos commentaires.
5 mars 2005 à 13:51
#define drand48 1.0/RAND_MAX*rand
pourquoi pas:
#define drand48 ((double)rand()/(double)RAND_MAX)
et d'ailleurs plus généralement: pourquoi pas:
inline double drand48()
{
return (double)rand() / (double)RAND_MAX;
}
faut vivre avec son langage :)
quoique... en fait t'as tout fait en C apparemment, mais si d'aventure tu te mettais au C++ ;)
5 mars 2005 à 13:46
En fait, la variable seed sert de générateur de nombres pseudo-aléatoires que l'on va utiliser avec la fonction srand48 ici dans mon programme.
5 mars 2005 à 13:42
Pour ta grande for: tu peux mettre une continue; à la fin de chaque if()..., ça te permet de ne pas devoir faire deux tests dans toutes tes if. tu vois ce que je veux dire ou je dois expliciter?
5 mars 2005 à 12:33