JeuWeb - Crée ton jeu par navigateur
Déterminer le nombre de bras d'une spirale - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Déterminer le nombre de bras d'une spirale (/showthread.php?tid=6850)

Pages : 1 2


RE: Déterminer le nombre de bras d'une spirale - Pio154 - 06-12-2013

Voilà ce que j'obtiens pour respectivement pour 157 et 314, donc non les images ne sont pas les mêmes. Sinon, je pense que tu as raison Xenos, il n'y a qu'un seul bras, et je ne les définis pas du tout comme tu l'as implicitement souligné.

Voilà, j'ai trouvé comment faire, mais il faut juste rentrer un paramètre manuellement : le nombre de bras.

Code :
                if ( (i+1) % configSpiral.numberBranch === 0 && configSpiral.branch[0] == 1 && 1 <= configSpiral.numberBranch  )
                    itp(i, dimension, couleur, x, y);
                else if ( (i+2) % configSpiral.numberBranch === 0 && configSpiral.branch[1] == 1 && 2 <= configSpiral.numberBranch )
                    itp(i, dimension, couleur, x, y);
                else if ( (i+3) % configSpiral.numberBranch === 0 && configSpiral.branch[2] == 1 && 3 <= configSpiral.numberBranch  )
                    itp(i, dimension, couleur, x, y);
                else if ( (i+4) % configSpiral.numberBranch === 0 && configSpiral.branch[3] == 1 && 4 <= configSpiral.numberBranch  )
                    itp(i, dimension, couleur, x, y);
                else if ( (i+5) % configSpiral.numberBranch === 0 && configSpiral.branch[4] == 1 && 5 <= configSpiral.numberBranch  )
                    itp(i, dimension, couleur, x, y);
                else if ( (i+6) % configSpiral.numberBranch === 0 && configSpiral.branch[5] == 1 && 6 <= configSpiral.numberBranch  )
                    itp(i, dimension, couleur, x, y);
                else if ( (i+7) % configSpiral.numberBranch === 0 && configSpiral.branch[6] == 1 && 7 <= configSpiral.numberBranch  )
                    itp(i, dimension, couleur, x, y);
                else if ( (i+8) % configSpiral.numberBranch === 0 && configSpiral.branch[7] == 1 && 8 <= configSpiral.numberBranch  )
                    itp(i, dimension, couleur, x, y);
                else if ( (i+9) % configSpiral.numberBranch === 0 && configSpiral.branch[8] == 1 && 9 <= configSpiral.numberBranch  )
                    itp(i, dimension, couleur, x, y);
                else if ( (i+10) % configSpiral.numberBranch === 0 && configSpiral.branch[9] == 1 && 10 <= configSpiral.numberBranch  )
                    itp(i, dimension, couleur, x, y);
                else if ( (i+11) % configSpiral.numberBranch === 0 && configSpiral.branch[10] == 1 && 11 <= configSpiral.numberBranch  )
                    itp(i, dimension, couleur, x, y);
                else if ( (i+12) % configSpiral.numberBranch === 0 && configSpiral.branch[11] == 1 && 12 <= configSpiral.numberBranch  )
                    itp(i, dimension, couleur, x, y);
                else if ( (i+13) % configSpiral.numberBranch === 0 && configSpiral.branch[12] == 1 && 13 <= configSpiral.numberBranch  )
                    itp(i, dimension, couleur, x, y);


.png   spirale3-157.PNG (Taille : 53,96 Ko / Téléchargements : 11)

.png   spirale4-314.PNG (Taille : 58,22 Ko / Téléchargements : 11)


RE: Déterminer le nombre de bras d'une spirale - Xenos - 06-12-2013

Pour Pi et Pi/2, c'est normal de ne pas avoir la même image: si la valeur P1*P2 est un sous-multiple de Pi, de la forme (Pi/k), alors le nombre de branches sera 2*k (k un entier positif strictement).
Par exemple, pour P1*P2=Pi=Pi/1 (1er cas, 3.14), tu as 2 branches (2*1).
Pour P1*P2=Pi/2 (2e cas, 1.57), tu as 4 branches (2*2).

J'ai pris 3.14 et 1.57 dans mes calculs, et non 314 et 157 comme demandé. Pourquoi? Parce que le facteur 100 n'influence pas le nombre de branches: il influence seulement la dilatation de la spirale. Pour 3.14, la spirale est de petite taille, pour 314, la spirale est de grande taille (100x plus grande).

Je ne comprends absolument pas le code proposé O.o
Pourquoi des tas de "if" avec la même commande? Pourquoi des modulo jusqu'à i+13?


RE: Déterminer le nombre de bras d'une spirale - Pio154 - 06-12-2013

Voilà ce que ça donne : http://xavier-lewandowski.fr/2www/galaxy/


RE: Déterminer le nombre de bras d'une spirale - Xenos - 06-12-2013

Si tu veux faire une ensemble de spirales, tu peux très bien ajouter un offset à la valeur de l'angle:

au lieu de faire
Code :
angle = P1*P2*i

Tu fais
Code :
angle=P1*P2*i+offset

Avec
Code :
offset=2*Pi*(indiceBrancheCourante/nombreBranchesTotal)
ou
Code :
offset=360*(indiceBrancheCourante/nombreBranchesTotal)
suivant si cos() et sin() sont en radians (1er code) ou en degres (2e code).

Ainsi, tu auras une superposition de spirales mono-branches:
[Image: spirale-plusieurs-branches.png]

Les points d'une branche numéro k, dans une spirale de N branches issue de ton code, sont tout simplement les points dont (i+k) est divisible par N (autrement dit, dont (i+k)%N == 0, équivalent à (i%N) == (k%N), (k%N) pouvant être simplifié par k tout seul si 0 <= k < N ).

Le flatras de if précédents se simplifie donc:

Code :
if (configSpiral.branch[ (i%configSpiral.numberBranch) ])
itp(i, dimension, couleur, x, y);



RE: Déterminer le nombre de bras d'une spirale - Xenos - 06-12-2013

Et la formule de calcul du nombre de branches risque d'être vraiment complexe...
D'ailleurs, dans cet exemple (dont j'ai oublié les valeurs de paramètres >.<), il n'y a plus vraiment de notion de "branche":
[Image: spirale-sans-branche.png]
[Image: spirale-sans-branche-2.png]


RE: Déterminer le nombre de bras d'une spirale - Pio154 - 10-12-2013

Pour moi il y a 21 branches, dommage que tu n’aies pas retenu les paramètres