Répartition d'éléments sur une sphère — Les-mathematiques.net The most powerful custom community solution in the world

Répartition d'éléments sur une sphère

Bonjour,

(PS : ce post est long. Je m'en excuse et j'espère ne pas avoir abusé. En gros, je propose une méthode simple pour faire une distribution sur une sphère et j'aimerais avoir vos avis sur des questions diverses, avant de m'y attaquer pour de bon) car je ne n'ai pas un niveau très élevé en Math)

je suis arrivé ici après avoir trouvé une discussion sur ce sujet ici : répartition uniforme sur une sphère

Moi :
– Je suis un graphiste qui développe de temps en temps des animations en Flash/ActionScript
– Jen Math, j'ai un niveau CAP, donc pas très élevé même si je suis très à l'aise (par exemple, je ne peut lire aucune des formules présentes dans le sujet que j'ai cité. Même pas de loin. Même pas en faisant un effort…)
– J'ai une bonne capacité à découper un problème compliqué en petits problèmes simple, ce qui me permet un peu de résultats en programmation
– En me servant des Maths que je connais et de cette capacité à décomposer des problèmes, j'arrive à m'amuser avec des particules

Ma problématique
– Je réalise pour le plaisir un feu d'artifice, je n'ai pas d'obligation ni de délais ni de résultat
– J'ai une version qui me plait bien, mais elle reste plane car je répartis les vecteurs de vitesse sur un cercle, de façon uniforme + une petite part de défaut aléatoire pour un résultat moins rigide
– Une version visible ici : version plane
– Pour avoir un résultat moins plat, je voudrais passer à une uniformité sphérique

Mes premières réflexions
Evidemment, vu mon niveau, ça va être un peu difficile : sinus et cosinus sur 2 axes au lieu d'un, j'imagine que je vais souffrir au carré, mais je prendrai le temps et je ferai l'effort. La vue que j'en ai pour l'instant : si j'arrive à répartir des points sur une sphère, je me sert de leurs coordonnées pour affecter un vecteur vitesse à mes particules de base, et tout le reste est comme pour le cercle. Frein gravitationnel sur les vecteurs en x et z, etc. Presque facile. Il n'y a donc que ce gros souci de la répartition sur une sphère.

Je suis donc arrivé suite à une recherche sur le sujet répartition uniforme sur une sphère
J'y ai appris que des gens très talentueux s'y sont cassés les dents pendant longtemps, et ça m'a un peu inquiété. Mais je me suis dit que je n'avais pas besoin, moi, d'un résultat scientifique, ultra précis, qui doit servir pour sauver la vie des gens ou d'autres choses importantes, donc, peut-être qu'une bonne ruse, un peu de malaise et bonne vieille règle de 3…

J'ai commencé par imaginer répartir mes points de façon régulière sur les faces d'un cube (ça m'oblige à avoir un multiple de 6 mais pour moi ce n'est pas un problème), puis a faire une projection vers la sphère incluse dans mon cube. Pour cela, je galère et du coup je me suis perdu dans le brouillard formé par la vapeur issue de mon cerveau. Tout ça pour une solution très approximative ? Je le garde sous le coude mais j'essaye de faire mieux.

J'ai continué par une répartition latitudes + méridiens. Ça, j'y arriverais, mais je vois bien qu'il se forme des anneaux vers les pôles, même si j'utilise une répartition progressive qui favoriserait l'équateur et les tropiques…

Enfin, je me suis penché sur la répartition par répulsion. Même si je ne dispose pas du magasine Science et Vie cité, j'imagine assez bien comment ça marche, grâce aux mots qui me parlent plus que les formules.

Mais…
… je crois que je peux faire le contraire : faire ce qui ressemblerait plutôt à de l'attraction, et c'est là que j'aimerais avoir vos avis et conseils avant de perdre trop de temps si c'est une fausse piste ou si vous avez de bons conseils à me donner. Excusez moi d'avoir été long dans cette présentation.
Je vais essayer d'expliquer la démarche que je compte entreprendre et la parsemer de références qui renverront vers autant de questions que je me pose.

Proposition de méthode
Imaginons que je veuille répartir n points sur une sphère (par exemple 7).
Je me munis d'une précision p : plus elle est élevée, plus mon résultat sera précis (enfin j'espère, et pour la démonstration j'imagine une précision à 1000).
Je tire, dans ces conditions, n*p points aléatoires sur la sphère (ça, je crois que je sais faire (1)).
(Et je nomme le nombre de points de précisions np)

Je choisis un premier point au hasard : n1. Je tri les autres en fonction de leur distance à n1(2).
Je regroupe les (p-1) points les plus proches de n1. Je calcule leur "milieu" (faut-il dire barycentre ?) (3)
En passant, je conserve aussi la plus longue distance entre ces p points élus (ou pour aller plus vite, le double de la distance entre le point n1 et le dernier point élu). J'appelle cette mesure m(2). Pour moi, je vois ça comme l'écartement approximatif entre les noyaux de cellules formées par les points de précision.

Mes points étant triés en fonction de leur distance à n1, il m'est facile de trouver le point dont la distance à n1 soit la plus proche de m. Je le nomme n2. Je ne garde que les (np-p-1)points restants…


Et là, je recommence pour n2 ce que j'ai fait pour n1
Et je recommence pour les n points…

Conclusion
A ce stade, j'ai décomposé ma problématique en petits problèmes que je crois pouvoir résoudre. En somme, j'ai une méthode à tester. Mais vous qu'en pensez-vous ?

Pour ma part, j'aperçois déjà un problème et j'ai une observation à ajouter…
Problème : quand je choisis le point n3, je peux tomber sur un point qui laissera une sorte de "couloir " entre la cellule formée par les points n1 et ceux de la cellule n3. (4)
Observation : j'ai d'abord pensé choisir le point n2 le plus éloigné de n1, mais je me dis que ce choix impose deux pôles alors que pour n=4, par exemple, ça ne devrait pas.

(1 : je pense à double tirage aléatoire en coordonnées sphériques )
(2 : je pense calculer cette distance au plus simple c'est à dire en ligne droite. Croyez-vous que se compliquer à calculer la distance sur la surface de la sphère changerait beaucoup le résultat ? )
(3 : je compte calculer la moyenne des x, puis la moyenne des y et z, puis normaliser sur le rayon. J'ai bon ?)
(4 : Je pense régler ce souci en pondérant le choix du point n3 par une tolérance me permettant de préférer le point le plus proche de n1, mais je ne suis pas sûr que ce soit suffisant. Si vous avez une autre piste ?)

Voilà. Merci de m'avoir lu jusqu'ici, j'espère ne pas abuser de votre temps. En tous cas, écrire tout cela m'a permis également de bien clarifier la situation et je suis assez confiant.
«1

Réponses

  • Bonjour,

    D'abord je voudrais dire que j'aime beaucoup ce que tu fais ! Si comme je l'ai compris, tu cherches bien à tirer des points uniformément au hasard sur la sphère de dimension 2, alors on peut faire ça très simplement de la façon suivante :

    On tire indépendamment trois nombres $X_1,X_2,X_3$ selon la loi normale centrée réduite (tous les langages informatiques que je connais incluent une fonction qui fait ça directement), et on prend alors le point de coordonnées
    $$
    \left(\frac{X_1}{\sqrt{|X_1|^2+|X_2|^2+|X_3|^2}}, \frac{X_2}{\sqrt{|X_1|^2+|X_2|^2+|X_3|^2}}, \frac{X_3}{\sqrt{|X_1|^2+|X_2|^2+|X_3|^2}}\right).
    $$
    Si tu as besoin de plusieurs points sur la sphère, répète ce procédé pour chacun.

    J'espère que ça te conviendra.
  • On tire des points $(h,\theta)$ de manière uniforme sur le rectangle $[-1,1]\times[0,2\pi]$, et on pose les points $(\sqrt{1-h^2}\,\cos\theta,\;\sqrt{1-h^2}\,\sin\theta,\;h)$ sur la sphère unité.
  • Bonjour Siméon.
    Merci de ta réponse.
    C'est juste un peu flou pour moi, mais je pense que c'est surtout parce que je n'ai pas l'habitude du vocabulaire.
    Ce que je devine dans le flou :

    x1, x2 et x3 sont des nombres aléatoires sans rapports, compris entre 0 et 1.
    (Je les obtiendrais dans mon langage par un Math.random())

    En associant ces 3 valeurs à un point (x,y,z) donc (x1,x2,x3), j'obtiens un point aléatoire à l'intérieur de ma sphère de rayon 1.
    Pour ramener ce point à la surface de ma sphère, je le normalise avec la formule que tu me donnes, puisque (racine de la somme de chacun des carrés de x1, x2 et x3) me semble être la distance entre ce point et le centre (0,0,0).

    Ai-je bien suivi ?
    Si oui, cela veut dire que je ne suis pas encore perdu. C'est bon.
    Cette formule répétée 1000 fois me permettra d'obtenir un millier de points en surface de ma sphère, grosso modo répartis.

    Mais, ce que je tente de faire, c'est d'organiser (même de façon imparfaite) un nombre beaucoup moins importants de points : entre 4 et 30 me semble une bonne hypothèse de travail. Et j'aimerais qu'il soient répartis uniformément sur la sphère pour lui donner une bonne perception en 3 dimensions. Je pense que là, le random est insuffisant (mais après réflexion, je vais sans doute tester quand même).

    Par exemple : sur un tirage aléatoire de 4 points, je ne pense pas qu'une forme géométrique logique puisse se percevoir visuellement. Alors que si j'utilise un tétraèdre, là oui. Idem pour 8 points, s'ils sont répartis aléatoirement ou sur les coins du cube inscrit dans la sphère, on n'a pas la même perception. Suis-je plus clair ?



    Pour le dire d'une autre façon, voilà ce que je tente de reproduire :
    Certaines fusées d'artifice sont juste sphériques, avec beaucoup de particules. Pour celles là, un simple random maîtrisé avec ta formule marchera très bien.
    Mais celles qui m'intéressent sont composées de plusieurs éléments (mais pas tant que ça exemple) qui forment comme des pétales. Ces pétales ont une répartition homogène. (Ils brulent ensuite en plein d'étincelles aléatoires mais ça, c'est un problème que je maîtrise). Ce que je cherche, c'est à définir les "directions" de ces pétales d'une façon logique et régulière.
  • Bonjour GaBuZoMeu

    Ça c'est sympa. Je crois comprendre que c'est la même idée, mais elle me fait gagner un tirage aléatoire ce qui peut être précieux. Par contre, je fais la même réserve : ça fonctionne pour un gros nombre de points, mais pour avoir une répartition équilibrée sur seulement quelques points ?
  • Bonjour,

    Je crois que l'idée de GaBuZoMeu est la même que la projection équivalente de Lambert utilisée en cartographie:
    Si l'on considère un cylindre tangent à la spère le long d'un grand cercle horizontal, l'aire de chaque zone sphérique comprise entre les cotes $h_1$ et $h_2$ égale $2\pi R|h_2-h_1|$, c'est à dire l'aire de sa projection sur le cylindre perpendiculairement à son axe.

    Mais il me semble que l'idée de Siméon est différente.
  • @Dldler : attention, Math.random() fournit un tirage selon la loi uniforme sur $[0,1]$, alors que pour faire comme j'explique on a besoin d'un tirage selon la loi normale. Peut-être as-tu une fonction norm() ou rnorm() ? Sinon tu peux utiliser la méthode de GaBuZoMeu qui permet de se contenter de Math.random() et donne le même résultat.

    Comme tu l'as remarqué, ceci donne des points au hasard, indépendants les un des autres. Pour un petit nombre de points il y a donc une probabilité non négligeable pour qu'une partie assez grande de la sphère ne contienne pas de point. Mais est-ce vraiment un manque de réalisme ? Peut-être vaut-il mieux commencer comme ceci et compliquer ensuite la génération si le résultat ne te convient pas ?
  • Il me semble qu'il y a une grande différence visuelle entre tirer un grand nombre de points aléatoires uniformément sur une sphère et en répartir un petit nombre de façon apparemment régulièrement répartie : comme ici par exemple.
  • x1, x2 et x3 sont des nombres aléatoires
    [large][...][/large]
    le centre (0,0,0).

    Ai-je bien suivi ?

    Oui: tu tires au sort un point A de $\R^3$ et tu regardes où la demi-droite $[OA)$ coupe la sphère de rayon 1.
    Aide les autres comme toi-même car ils sont toi, ils sont vraiment toi
  • @remarque : je suis bien d'accord mais autant commencer par le plus facile si ça peut convenir, surtout quand la différence de difficulté ou de temps de calcul est aussi grande.
  • OK. J'essaye de suivre :-) Merci à tous. Pour vos participations, mais allez y doucement. Je ne comprend vraiment rien aux petits hiéroglyphes, ce n'est pas un manque de volonté de ma part, je vous assure.

    En gros, je passe à côté de subtilités (sans doute même des grosses subtilités) entre GabuZoMeu et Siméon. Dans ce cas, pour départager, est-ce qu'il y en a une qui permet une meilleur répartition ?
    Par exemple, la projection équivalente de Lambert semble préserver les surfaces. Est-ce que cela me permet de répartir mes points de façon homogène sur un cercle si j'ai bien compris, plutôt que sur une sphère puis de les projeter ? Genre une répartition par motif de triangle isocèles ça irait ? J'ai un doute sur l'effet de bord, mais peut être que je suis à la masse.

    En tout cas, je suis d'accord avec remarque(?) : pour moi il y a une différence visible entre une répartition aléatoire et une répartition comme celle des électrons qu'il cite (c'est exactement ce que je cherche à faire en tous cas. Mais avec juste des règles de 3, et un ou 2 cos/sin, vous croyez que c'est possible ?)

    Siméon : je chercherai quelle est la particularité des tirages normaux, au moins par curiosité. Il n'y a pas de fonction comme ça à ma connaissance, mais je ne connais pas tout? J'ai simplement une fonction normalize qui me permet de transformer un point à 3 coordonnées pour que le vecteur(?) résultant soit de longueur 1…
    Et pour la version simple avec juste des points aléatoires, je compte bien la faire aussi. Mon but étant de créer autant de variantes de fusées possibles (d'ailleurs je garderai les planes aussi, sûrement en les transformant en ellipses).
  • @Dldler : la méthode de GaBuZoMeu et la mienne donnent exactement le même résultat, à savoir un tirage uniforme d'un point sur la sphère. Autant prendre la sienne si tu n'as pas de fonction pour simuler une variable normale.

    Le problème avec les dispositions vraiment régulières sur la sphère c'est qu'il y en a très peu qui sont possibles, voir ici : http://fr.wikipedia.org/wiki/Solide_de_Platon. Pour celles-là on peut donner des formules mais le nombre de points est fixé.
  • ;-)
    J'ai bien compris qu'il n'y avait rien. C'est à cause de cela que je suis arrivé ici.
    Donc : méthode GaBuZoMeu ou Siméon : méthodes équivalentes dans le cadre de ce qui m'intéresse (ça me rassure un peu) même si j'ai bien compris que ce sont 2 méthodologies différentes.

    (HS : est-ce que, par hasard, une méthode normée ça retourne une valeur entre -1 et 1 avec prépondérance des valeurs autour du zéro sur un rapport au carré ? (je sais, je sort ça avec mes mots à moi, mais peut-être que c'est compréhensible par des initiés, on sait jamais).


    Sinon, je vais laisser reposer et voir ce que ça donne. (Si je ne suis pas trop hors sujet sur ce forum, je peux passer de temps en temps, vous montrer ou j'en suis)
  • Tu peux aussi avoir "en stock" un certain nombre de modèles de fusées avec des points régulièrement répartis (polyèdres réguliers pour 4,6,8,12,20) ou à peu près régulièrement répartis (prisme à base pentagonale, 10 sommets par exemple). Ca ne suffirait pas à ton bonheur ?
  • :) Ça serait une sorte de base de données ? Oui, c'est possible. Et peut-être que j'y viendrai.
    Mais ou serait mon plaisir alors ? ;-) Malgré la difficulté, je compte quand même essayer ma méthode. Juste parce que j'aime bien faire travailler mon cerveau. C'est pour ce genre de défi que je joue avec les particules.

    Et j'ai trouvé une autre piste : dans la modélisation 3D, les sphères sont traitées comme des volumes à facettes triangulaire. En somme, une liste de points à la surface de la sphère, qui doivent quand même bien être répartis de façon régulière. Alors, ils font comment en modélisation ? Je vais aller chercher un peu de ce côté…
  • Il semble qu'ils font en utilisant un "mesh" parallèles-méridiens, ou en partant d'un polyèdre régulier et en subdivisant (par exemple un triangle de l'icosaèdre en 4 triangles, ce qui fait 42 points ... )
  • Si je ne vois pas ce qu'est un mesch, par contre, je vois bien l'idée.
    Je peux faire une progression: partir d'un tétraèdre, et, à chaque profondeur, ajouter le centre e chaque triangle projette sur la sphère... C'est une solution simple et efficace a programmer. Le seul souci,je crois, c'est qu'il ya peu d'options puisqu'on triple le nombre de points a chaque profondeur. Ça devrait donner: 4,12,36,108... Mais c'est un bon début qui permet une répartition exacte sans trop de calculs.
  • Diviser les triangles en trois en ajoutant le centre de gravité n'est pas une bonne idée : quelques itérations à partir d'un triangle équilatéral montrent qu'on n'aboutit pas du tout ainsi à une répartition régulière. Par ailleurs ton décompte du nombre de points n'est pas correct : c'est 4, 8, 20, 56
    Diviser les triangles en quatre en ajoutant les milieux des côtés donne quelque chose de bien plus régulier.
  • D'ailleurs pour aller plus vite, tu peux directement diviser chaque triangle de l'icosaèdre de départ en $k^2$ triangles équilatéraux, $k$ entier, et les projeter sur la sphère. Ce n'est peut être pas aussi régulier que la construction proposée par GaBuZoMeu, mais il n'y a pas à réfléchir du tout.
  • Voilà, ça se tasse un peu vers les angles, mais il fallait s'y attendre. En ajoutant un peu de bruit, on ne devrait pas s'en apercevoir. Je mets un bout de code scilab à traduire dans le langage que tu utilises (j'ai pris un octaèdre plutôt qu'un icosaèdre par paresse pour les coordonnées de ses sommets).
    function y=affine(x,k) // envoie les triangles du plan dans un des triangles de l'[s]icosaèdre[/s]octaèdre
        [p,q]=size(x)
        y=[-1,-1;1,0;0,1]*x/k+[1;0;0]*ones(1:q)
    endfunction
    
    function y=sphere(x) // projection sur la sphère
        n=[1;1;1]*sqrt(sum(x.*x,'r'))
        y=x./n
    endfunction
    
    k=15
    x=[] // sommets à coordonnées entières des triangles dans le plan qui seront envoyés sur la sphère
    for i=0:k
        for j=0:k
            if i+j<=k then
                x=[x,[i;j]]
            end
        end
    end
    
    y=sphere(affine(x,k))'
    clf
    boite=1.2*[-1,1,-1,1,-1,1]
    param3d1(y(:,1),y(:,2),list(y(:,3),-9),flag=[3,3],ebox=boite)
    
    37695
  • En partant d'un icosaèdre, le résultat aurait déjà été bien meilleur...
  • C'est sûr. En même temps...
  • Merci beaucoup remarque.
    J'ai compris le principe et je crois que je peux m'en sortir côté maths. Je vais jouer un peu avec tout ce que j'ai compris et aller chercher mes limites en explorant les différentes pistes. Ne vous inquiétez pas si je ne donne pas de nouvelles rapidement, je prends mon temps, mais je vous promet de revenir vous montrer mes résultats.

    Un grand merci à toute la communauté.
  • Bonjour,

    Je reviens un instant sut la répartition "à la Lambert", [small]vous savez que j'ai un petit faible pour lui[/small], aussi parce que l'idée de la projection équivalente parle à Didier
    En réponse à sa question ci-dessus, oui Didier, la distribution proposée par GaBuZoMeu garantit une équirépartition: il s'agit en fait d'une projection de Lambert inversée: on choisit les points sur le cylindre tangent à la sphère, puis on les projette sur la sphère perpendiculairement à l'axe du cylindre.

    Alors si Didier veut un peu forcer cette équirépartition, tout en gardant une part d'alea pour donner une impression de flou il pourra découper le développement rectangulaire du cylindre $[-1;1]\times [0;2\pi]$ en parcelles carrées, par exemple 10x31 ou 20x63 petits carrés puis tirer un point au hasard dans chaque carré .
    La projection de ces 310 ou 1260 points sur la sphère par $Lambert^{-1}$ devrait donner quelque chose de bien conforme à ses attentes.
    L'équirépartition globale est garantie puisque tous les carrés se projettent sur la sphère sur des surfaces d'aires égales: ainsi, au voisinage des pôles, ils sont plus serrés parce que moins larges, mais comme ils sont plus longs, la densité de la distribution ne s'en trouvera pas altérée.

    Amicalement. jacquot

    Après, si remarque a le temps de faire un dessin ;-)...
  • > Après, si remarque a le temps de faire un dessin winking smiley...

    Il l'a eu, il y a très, très longtemps...
  • Bonjour Jacquot.

    Si je pars sur cette idée, mais sans l'aléa, donc une grille à motif carré sur le rectangle développé de la sphère :
    - Est-ce que je ne vais pas avoir un effet d'anneaux à cause de ce resserrement des zones ? Exactement comme ce qui se passe avec la méthode latitudes/méridiens sur laquelle j'ai déjà un peu réfléchi (avec mes petits moyens, ne riez pas) ? Si oui, je préfèrerais ne me lancer que sur une des 2 pistes :-)
    – avantage de ma méthode : je la comprends, je la maitrise, alors que la projection inverse de Lambert,je pense que je vais souffrir un peu…
    – avantage de la projection de Lambert : meilleure répartition mais toujours des anneaux (ou pas ?)
  • Bonjour,
    Je voulais dire un petit truc, dû à mes petits moyens (pour copier, parce qu'elle est admirable, la modestie non feinte de Dldler dont le feu d'artifice m'a épatée hier : sincèrement, trop joli, avec les fusées qui s'éteignent petit à petit, on s'y croirait, j'aimerais seulement comprendre d'où le feu part par rapport au point-clic-souris mais bon, quand on s'éclate à faire un bouquet final, on pointe et clique totalement au hasard donc même si la réponse est très tardive, ce sera sans importance ; sans compter qu'il me tarde franchement de voir le résultat final : des feux d'artifice partant de points bien répartis sur toute une sphère mais ça sera grandiose !).
    C'est par rapport à cette histoire de couper le triangle en 3 triangles ou 4 triangles (à la tapis de Sierpinski, je crois), deux possibilités différentes proposées par des intervenants : si on veut les colorier et qu'on ne dispose que de deux couleurs, dans le tapis, on colorie le central des 4 d'une couleur et les 3 autres autour d'une autre et par contiguité à d'autres triangles autour on s'en sort bien mais je suis ennuyée pour colorier le triangle découpé en 3 en bicolore, il y a deux triangles intérieurs de même couleur qui se touchent. Autre problème également, si je veux "flécher les côtés", admettons dans le sens des aiguilles d'une montre : quand je coupe en trois, je n'arrive pas à trouver des flèches dans les sous-triangles qui respecteraient le sens des flèches initial alors que j'y arrive avec le découpage en 4 (il suffit alors que le fléchage des côtés du triangle central soit inversé par rapport au fléchage du triangle englobant). Bref, on dirait que le découpage en 4 est "mieux" à différents points de vue.
    Voilà, j'espère que je serai comprise parce que c'est embrouillé.
    @+,
    Denise
  • La projection inverse de Lambert est entièrement contenue dans $(\sqrt{1-h^2}\,\cos\theta,\;\sqrt{1-h^2}\,\sin\theta,\;h)$. Ca ne me semble pas trop difficile.

    Par ailleurs l'image d'une grille à motifs carrés sur le rectangle ne donnera rien de bien joli par projection inverse de Lambert (répartition de plus en plus serrée sur des parallèles de plus en plus espacés au fur et à mesure qu'on se rapproche des pôles).
  • @ GaBuZoMeu :
    La projection inverse de Lambert est contenue dans celle que tu proposais.

    Si je proposais un découpage du rectangle en 310 carrés, c'était juste pour forcer un peu l'équirépartition pour un nombre relativement modeste de points placés.
    Mais ces points seraient alors placés au hasard, chacun dans son carré.

    Je ne pense pas qu' avec mes 310 carrés ( ou rectangles presque carrés), la trame devienne visible et impose un effet de moire, puisque la densite des méridiens aux pôles sera compensée par l'augmentation de l écart des parallèles.
    Mais j'ai bien conscience que tout ça tient du bricolage et qu'il faudrai essayer pour avoir une impression visuelle.

    Amicalement. jacquot
  • @ Denise : merci pour les compliments.
    Mais ou vois-tu de la modestie ? Je m'attaque allègrement et sans complexe à un problème mathématique sur lequel planchent des mathématiciens depuis longtemps, avec pour seuls outils des additions, multiplications et autres règles de 3. Car si personne n'a réagi sur la méthodologie que j'ai proposé, je compte bien m'y amuser quand même ;-) et obtenir un résultat acceptable ! Prétentieux, le gars…
    Ce qu'il y a, c'est que je ne connais rien à la notation que vous utilisez et qui vous paraît simple. Tu ne le croirais peut-être pas, mais même la formule de GaBuZoMeu, qu'il trouve simple, je tombe en arrêt devant, j'ouvre la bouche et je me contente de baver. En me forçant à un regard flou, je finis par distinguer une idée générale de la structure et, de là, je me traduis les petits morceaux dans mon vocabulaire à moi. Mais c'est laborieux. Et en même temps, ça m'amuse :-)
    Par contre, demande moi de représenter l'intersection d'un tétraèdre et d'un cube inscrits dans un cercle, je le fais de tête, presque sans hésitation. (Comprenne qui compagnonne vers Compostelle).

    Pour le clic générateur de fusées sur mon exemple : la coordonnée verticale n'est pas prise en compte. La coordonnée horizontale est stockée comme destination d'une fusée qui est générée, elle, au centre de la zone. Le tout n'est pas finalisé, donc si ton navigateur a redimensionné la zone, il se peut que ce ne soit pas pris en compte. désolé, c'est juste un outil pour l'instant.

    @ remarque : cool ! je viens de comprendre pourquoi choisir le centre du triangle était un mauvais choix, en gros puisque le résultat ne donne pas des triangles isocèles, alors qu'utiliser les milieux des sommets justement génère de nouveaux triangles isocèles :-) (je ne me risque pas à compter les points par contre)

    @GabuZoMeu : je m'en doute un peu, pour la répartition plus aérée. Après, si on ne densifie pas trop le nombre de points de départs, c'est acceptable. En tous cas, ça confirme un peu que je vois ça très proche de ma méthode par latitude/longitude.
    Peut-tu me confirmer si je traduis avec mes mots à moi la formule inverse de Lambert :

    Je trace une grille dans un rectangle de dimensions : 2 x 2Pi (mais partant de -1 et allant à 1 pour l'abcisse, j'ai bien vu la subtilité)
    Pour chaque point p1 de coordonnées (A,B) dans cette grille :
    je peut projeter sur ma sphère un point p2 de coordonnées (x,y,z) en calculant ses coordonnées par :

    x = racine carrée de (1 - A2) * cos(B)
    y = racine carrée de (1 - A2) * sin(B)
    z = A

    [edit] j'ai eu un petit souci pour transmettre mon message, j'avais un refus du forum… par petits bouts c'est passé. Ceci pour expliquer les nombreuses éditions[/edit]
  • Vite fait, ce que ça donne avec un triangle icoséadrique.37717
  • @Didier : Le $h$ pour "hauteur" et le $\theta$ pour bien indiquer qu'il s'agit d'un angle me paraissaient plus parlants que $A$ et $B$. A part ça, je ne vois pas de différence entre ce que j'avais écrit (qui te fait baver, paraît-il), et ce que tu écris. :-S
  • Le découpage des triangles icosaédriques donne des résultats assez satisfaisants :37723
  • Ouaw !

    Pourquoi assez satisfaisant... ? C'est chouette et avec les fusées, ce sera super.

    Il manque la couleur, pour donner davantage l'impression de relief, parce que là, le cerveau distingue mal entre les points du fond et les points de devant sur la sphère. Et puis, toujours par illusion d'optique je pense, on a l'impression que le cube "respire", il semble grossir et diminuer légèrement, sûrement le temps que le cerveau s'adapte à sa taille changeante proportionnellement à celle de la sphère. Continuez à chercher...

    Bonne journée.
  • Toujours aussi super graphiste Remarque !

    Bruno
  • Bonjour tout le monde,
    Voici la dispersion des débris par l'inverse de l'équivalente cylindrique de Lambert (méthode des 310 carrés)

    @denise: je sais, il manque le mouvement, mes débris sont collés sur une sphère transparente, on n'arrive pas à distinguer le devant du derrière... bref, je n'arrive pas à la cheville de remarque :-S

    @ Didier & GaBuZoMeu : il n'y a pas de moirage ni polaire ni équatorial, l'impression d'une distribution aléatoire équirépartie me semble convenable.
    Le dessin a été réalisé avec EXCEL, les recalculs par F9 donnent des explosions bien variées...37725
  • ... et voici une autre disposition de 310 débris.
    Leurs positions ont été choisies de façon aléatoire et indépendante sur une carte sans grille (développement du cylindre) comme le préconisait GaBuZoMeu.
    Il y a bien quelques lacunes ou grumeaux, mais il n'est peut être pas nécessaire pour autant, d'en passer par une grille...37731
  • @jacquot,
    je viens là pour un feu d'artifice en 3D et je vois une pizza, avec des points concentrés autour et dispersés au centre (ce n'est pas moi qui ai écrit débris, je croyais que c'étaient les fusées).
    J'espère que vous comprenez bien que je viens regarder les résultats de vos programmes car cela est très distrayant, souhaitant que mes petites remarques ne perturbent surtout pas votre saine émulation (qui s'en passerait sûrement).
    Il semblerait qu'on soit d'accord sur le fait que remarque est loin en tête...
    A+, ça promet.
    Denise
  • je vois une pizza, avec des points concentrés autour et dispersés au centre
    Le fait que la densité de points sur le bord du disque soit plus importante que celle au milieu est simplement le reflet de la distribution uniforme sur la sphère. On le voit bien aussi sur l'animation de remarque.
  • Elle a dit pizza:-(37735
  • Merci GaBuZoMeu : effectivement, sur l'animation de remarque aussi.
    Il vaudrait peut-être mieux tricher alors, tant pis, quitte à préciser comment on triche (il faut avoir à l'esprit cette idée de légères corrections par le cerveau qui souvent applique des procédés d'équilibrage) sinon, je crains qu'on ait une moins bonne "impression" d'équirépartition comme souhaitée initialement. Mais j'ai bien compris que c'est normal que ça soit "équiréparti dense autour".
    Ca me gêne de ne pas signer, même si ça ressemble maintenant à une vieille habitude périmée. Tant pis.
    Denise
  • Il vaudrait peut-être mieux tricher alors, ...
    Surtout pas ! Tu as une curieuse vision de l'analyse d'images par le cerveau. La plus grande densité sur le bord est un élément qui crée la sensation de volume, une répartition uniforme sur le disque ne ferait qu'aplatir la perception.
  • @ denise chemla : le cube respire parce que c'est du graphisme 3d de scilab, et le graphisme 3d de scilab, on est bien obligé de l'admettre, n'est pas à proprement parler au top. Mais il est facile à utiliser.
  • Bonjour,

    Je viens de taper rapidement un petit programme en python en utilisant la méthode suggérée par jacquot
    de découpage en 310 carrés. J'ai mis quelques commentaires au cas où.
    Étant donné qu'il s'agit d'un interpréteur, le programme est assez lent.

    http://www.codeskulptor.org/#user38_oqnTOXmkCUlZdt3.py

    En modifiant le code (lignes 38-39) pour mettre un tirage aléatoire dans une carte sans grille, on obtient d'assez grandes parties de la sphère complètement vides.

    http://www.codeskulptor.org/#user38_p46uJohKRIXg34D.py
  • Pour se faire une meilleure idée de l'efficacité du découpage icosaédrique, je mets ci-dessous une autre animation. Je rappelle le principe : on prend les 20 faces triangulaires de l'icosaèdre, on les découpe chacune en $k^2$ triangles équilatéraux égaux en découpant chacun de leurs côtés en $k$ intervalles, on projette le résultat radialement sur la sphère. J'ai fait varier $k$ de $1$ à $50$ en présentant une orientation différente pour chaque valeur de $k$ (il aurait été préférable de faire tourner la figure pendant un certain temps pour chaque valeur de $k$, mais là c'est moi qui ne l'ai pas (le temps)). (Ici aussi, pour une raison obscure, il faut cliquer sur le dessin pour voir l'animation).37739
  • Pour les aficionados du hasard, j'ajoute qu'il est facile d'en ajouter une petite dose au découpage icosaédrique. :-D
  • @remarque : Le forum était réglé pour afficher directement toutes les images dont la résolution était inférieure ou égale à 800 par 600. Au delà, il fallait cliquer dessus.
    Je viens de changer la résolution maximale à 800 par 800, tu avais 32 pixels de trop en hauteur ! :-D
  • Bon, je suis un peu largué, mais je suis content que cela vous amuse :-) et admiratif aussi.

    Je viens d'implémenter la base de la méthode Lambert.
    Voilà ou j'en suis ;
    Je n'ai pas eu trop e mal, GaBuZoMeu n'avait pas tort, je me suis fait peur pour pas grand chose, merci pour la clarté du propos, ça me fait gagner beaucoup de temps d'avoir des formules fiables. Sinon, je galère et comme je doute de tout, je me perds facilement pour pas grand chose. Là, je n'ai eu aucun souci.

    Version flash

    Je continue de mon côté, mais je ne desespère pas de finir par réussir le "icosaedrique" de remarque ;-)



    PS : regardez le paramétrage (50,50,20) (je ne parle pas du rayon). C'est le genre de forme que je trouve le mélange aléatoire / régularité intéressant. Si vous en trouvez d'autres, je suis preneur.
  • On voit assez nettement réapparaître les triangles de l'icosaèdre. Cet effet serait sans doute moindre dans une construction de maillage par itération.
  • (tu) Didier,
    Avec une bonne dose de dispersion.
    Balance-nous les fusées quand ton projet sera abouti..

    @ Philippe, j'ai cliqué sur tes liens mais n'ai pas su lancer la simulation: message d'erreur
    Line 76: undefined: HierarchyRequestError

    Amicalement. jacquot
  • Ah, oui. Je voulais aussi préciser parce que ce n'est peut-être pas très clair : je recherche plutôt des "structures" organisées comme les propose remarque.
    Je me sers ensuite de l'aléatoire pour éviter la perfection mathématique (donc très peu d'aléatoire) ou esthétique.
    En voici un autre d'ailleurs : (30,255,5). Je trouve que l'aléatoire et la structure se marient bien sur ce genre d'exemple.
Connectez-vous ou Inscrivez-vous pour répondre.
Success message!