FRACTALE TREE (ARBRE) VERSION GLUT

Zazour Messages postés 120 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 14 janvier 2006 - 5 mars 2005 à 12:33
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 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.

https://codes-sources.commentcamarche.net/source/29908-fractale-tree-arbre-version-glut

Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 2
14 juil. 2005 à 13:47
Salut,
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.
gabriel_jm Messages postés 3 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 18 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és 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 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és 162 Date d'inscription jeudi 15 mars 2001 Statut Membre Derniè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:

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.
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
17 mars 2005 à 18:45
nickel cette source !!!
:)
Utilisateur anonyme
11 mars 2005 à 19:09
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és 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 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és 120 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 14 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és 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 2
5 mars 2005 à 14:25
Kirua,
Tout simplement un grand merci pour tes explications. Je vais tester ça.
Merci encore.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 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és 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 2
5 mars 2005 à 13:57
Très bonne remarque Kirua à propos de drand48. Je n'y avais pas pensé.
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 2
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és 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
5 mars 2005 à 13:51
tu devrais quand même déclarer des constantes et pas des defines.

#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++ ;)
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 2
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és 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 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és 120 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 14 janvier 2006
5 mars 2005 à 12:33
super ton arbre,mais a quoi sert la variable seed?