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


Déterminer le nombre de bras d'une spirale - Pio154 - 05-12-2013

Salut à tous,

J'essaie de compter le nombre de bras d'une spirale en 2D (JS/Canvas)

Si l'on prend les deux dernier nombre d'un bras, on peut trouver le nombre de bras, mais pour le trouver il me manque une donnée ou alors je ne sais pas comment faire.

Code :
    function drawSpiral () {
        var i = x = y = angle = 0;
        context.clearRect(0, 0, 1024, 768);

        context.moveTo(centerx, centery);
        context.beginPath();

            while (i < configSpiral.width)
            {
                // configSpiral.param1 varie entre 0.01 à 1
                // configSpiral.param2 varie entre 100 à 300
                angle = configSpiral.param1 * configSpiral.param2 * i;
                x = centerx + angle * Math.cos(angle);
                y = centery + angle * Math.sin(angle);

                dimension = RDD(0.8, 2); // dimension d'une étoile
                // déplace aléatoirement entre le paramètre 1 et 2 depuis son origine
                deformation = (configSpiral.deformation[0] == 0) ? 0 : RDD(configSpiral.deformation[1], configSpiral.deformation[2]);
                couleur = RDD(0,2); // couleur aléatoire définit dans un tableau

                // dessine une étoile
                itp(i, dimension, deformation, couleur, x, y);
                i++;
            }
    }


.png   spirale1.PNG (Taille : 122,39 Ko / Téléchargements : 34)

.png   spirale2.PNG (Taille : 97,81 Ko / Téléchargements : 23)

Une idée ?


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

Salut,

Je n'ai pas compris la question, car je n'ai pas compris quelles données tu as en entrée...


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

Je voudrais pouvoir compter le nombre de bras dans chaque spirale.
Dans le premier, on peut en compter 2 et dans le deuxième 4.
Dans certaines spirales, on peut en compter jusqu'à 11, 13 bras.

PS: j'ai mis des commentaires dans le code.


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

C'est pas clair. Si c'est toi qui dessine la spirale tu sais combien de bras elle a non ?


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

Justement, la spirale est créée aléatoirement selon les paramètres param1 et param2.
Hors je pourrais trouver manuellement le nombre de bras mais j'aimerais le faire automatiquement ou alors c'est impossible.


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

quelles sont les valeurs mises pour les deux exemples de spirale?


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

configSpiral.width : 80
Paramètre1 : 0.01 (je le laisse toujours à cette valeur)
Paramètre2 :
- 331 de la première image mais à l'envers j'ai perdu la valeur
- 153 pour la deuxième image


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

Le problème est mal posé, car imprécis. Dans l'exemple ci-dessous, avec (param1*param2)=100, combien de branches la spirale a-t-elle?

[Image: spirale.png]

Au centre, on pourrait dire 1, aux extérieurs, c'est 12...


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

si tu mets en param2:
* 314
* 157

tu obtiens les mêmes images?

2PI correspond à un cercle entier
3,31 c'est presque PI (180°)
1,53 c'est presque PI/2 (90°)


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

Les sous-multiples de Pi (pour le produit P1*P2, car seule le produit P1*P2 intervient dans ce code) donnent des motifs rectilignes: le calcul fait intervenir cos(a) et sin(a) avec a=P1*P2*i, donc si P1*P2 est un sous-multiple de Pi, on peut écrire a=Pi/k*i (avec k un entier), et donc, cos(a)=cos(Pi/k*i) ce qui donnera la même valeur pour i=0 ou i=2*k (les valeurs se répèteront et les branches seront donc rectilignes).

P1*P2= Pi:
[Image: spirale-pi.jpg]

P1*P2 = Pi/2
[Image: spirale-pi-sur-2.jpg]

P1*P2 = Pi/4
[Image: spirale-pi-sur-4.jpg]

P1*P2 = Pi/8
[Image: spirale-pi-sur-8.jpg]

Mais l'équation de cette spirale est trompeuse. Si on ne dessine que les points, on voit bien des branches, mais si on dessine l'équation elle-même, on s'aperçoit qu'en pratique, c'est seulement une spirale à 1 et 1 seule branche, et seul l'espacement relatif entre les points fait apparaitre un effet de "plusieurs branches":

P1*P2 = Pi/8, on voyait 16 branches tout à l'heure, mais en pratique, la spirale n'en n'a qu'une seule:
[Image: spirale-pi-sur-8-1-branche.jpg]

D'où la question: comment définis-tu une branche? Dans l'exemple que j'ai montré dans mon post précédent, il y a "1 branche" au centre, mais "12" à l'extérieur, car l'espace entre les points consécutifs de l'équation est faible au centre, mais grand aux extérieurs.