Salut la clique !
Bon, j'ai une question…
Ouais, ça fait bizarre de me voir poster ici hein
Voilà, je souhaiterais répartir sur une sphère et de manière uniforme un nombre donné (mais réglable) d'éléments (choisissez ce qui vous plait, des tapis, des lavabos, des girafes, ou une famille d'écureuils boréal à poil bleu des Andes).
Par « manière uniforme », je veux dire que si je choisis de répartir 4 écureuils (c'est mon choix), leur répartition sur la sphère les disposera à équidistance, un peu comme ça voyez :
Si je mets mon réglage (la question c'est lequel) à 5 écureuils (suivez un peu), pof, j'en ai 5 à équidistance, pareil pour 12, 56, ou 2163 si c'est une famille nombreuse.
J'ai testé :
• Écureuil dans cloner
• Sphère (ou peta, hexa, machin truc)
• Cloner en mode objet avec sphère comme objet
• Répartition : j'ai tout testé, forcément considérant la malliage, ça colle pas. Le problème du mode surface, c'est qu'il est aléatoire (la solution était si proche…)
J'ai aussi testé ça…
Et ça…
Rien ne fonctionne efficacement, l'objet permettant le résultat le plus approchant est un cube dans un HN, ce dernier étant réglé comme source pour la répartition au cloner.
Par ailleurs, avec ces solutions, tout est basé sur le maillage de l'objet initial, donc impossible de dire, « je veux tant d'écureuils, précisément »…
Une idée ?
Merci !
Si c'est pour faire quelque-chose comme sur l'image ci-dessous, il est possible de le faire avec SurfaceSpread, en choisissant un nombre d'instances élevé et puis en mettant une contrainte de distance minimale entre éléments. Evidement, la distance n'est certainement pas strictement constante, mais y a t'il une solution à cela ?
SurfaceSpread est un plugin payant, mais il y a une version de démo. Et il n'est pas limité aux éléments de paysage !
La différence par rapport à la formulation de ton problème est que tu définiras la distance, ce qui établira le nombre de clones, et non le nombre de clones. Mais est-ce important ? (et l'interface présente le nombre de clones générés, donc le réglage n'est pas trop difficile)
Et en prime, il te permettra de mélanger les lavabos, les girafes et les écureuils !
Dernière modification par bru ; 11/03/2015 à 23h08.
Mmm, pour les petits nombres de points, tu peux utiliser le solide platonicien car ce sont des polyèdres réguliers, note que pour certains nombres il est impossible d'avoir un espacement régulier.
Mais on peut faire une estimation grâce à l’algorithme de Saff et Kuijlaars :
Bon c'est certes pas parfait, d'ailleurs si tu joues avec le nombre de clones tu remarques que c'est similaire à un clonage sur une spirale.
Mais c'est intéressant, y a sûrement d'autres méthodes !
Dernière modification par César Vonc ; 12/03/2015 à 10h30.
Bonjour bru et César,
Merci de vous être penché là dessus !
Bru, Huv m'avait effectivement parlé de SurfaceSpread.
Malheureusement, on voit déjà sur ton exemple un manque d'uniformité dans la répartition.
Je vais voir pour le tester, mais la proposition de César, en l'état, donne un résultat relativement homogène.C'est assez efficace avec un nombre élevé, moins avec si c'est faible (ex 7 ex.). Étonnant l'effet spirale en tout cas, on le ressent bien.
Encore merci de vous être penché la dessus, franchement, je ne pensais pas que le problème soit tel…
Ça lance l'idée à quiconque voudrait faire un plugin pour faire une répartition idéale.
Hello
Dans l'idée de progresser un peu en python, et ayant sous la main un morceaux de code susceptible de convenir, je me suis lancé.
Il s'agit d'une expression destiné au particule de maya que je tente d'adaper. Le principe était de simuler une répulsion des particules entre elles afin d'obtenir une répartition homogène. Ce qui correspond à peu prés à la demande. Je précise que ne suis pas l'auteur de l'algorithme.
C'est pas tout à fait au point et pour le moment le résultat est TRES approximatif. mais ça devrait normalement pouvoir donner un résultat acceptable.
je vais probablement poursuivre le sujet dans programmation car je vais avoir pas mal de question pour y arriver.
Je pose quand même le fichier ici mais on ne se moque pas c'est pas au point.
Il faut jouer l'animation et l'arrêter quand ça parait ok. En théorie plus le temps passe plus ça devrait être précis.
Les deux chose à régler de suite
-la normalisation qui ne se fait qu'a l'arrêt de l'animation.
-Et une manière de récupérer la position finale des objet. Pour le moment c'est un cloner qui affiche les objet, mais c'est pas forcément le plus pratique surtout dans l'idée de placer tes girafes et tes lavabos où tu en a envie. Ça pourrai être un bouton pour créer des objets null. Mais la c'est plus un problème d'interface. Le TagPython est peut être pas le mieux adapté.
Ca fait partie de mes future questions
Salut Floc !
Wow, THE truc lol.
Désolé pour le délai de réponse, j'étais un peu pris.
J'ai joué avec (en plus c'est marrant), je ne sais pas si je fais un truc de travers, mais le résultat en assez aléatoire quand je change ne nombre particules (écureuils).
Je suis toujours effaré en constatant que finalement la chose est complexe, alors que notre cerveaux projette le concept instantanément.
Non tu ne fais rien de travers
Le principe c'est de distribuer aléatoirement les particules sur la sphère et ensuite d'appliquer la répulsion en faisant play. Plus tu laisse jouer plus la répartition devrait être régulière.
Pour le moment si tu est à la frame 0 et si tu change le nombre d'écureuils une nouvelle distribution aléatoire est crée. Et si tu n'est pas à la frame 0, ben… tu crée des particule qui ne sont pas prise en compte.
Pas tout a fait au point quoi !
C'est peut-être parce que notre cerveau est enclin à faire des erreurs ! Regarde ceci !
Je ne suis pas mathématicien, mais si une distribution telle que tu la désires existe, cela me semble signifier qu'un polyèdre régulier existe avec le nombre de sommets requis, dont les faces seraient des triangles. Et si ce que je lis sur la page de Wikipédia est exact, cela n'existe que pour trois configurations (les deux autres n'ayant pas des faces triangulaires).
Donc, tu es probablement condamné à une approximation. Je n'ai pas regardé de près la solution de Floc, mais ce qu'il en décrit me fait penser que cela doit converger vers le même genre de solution que SurfaceSpread, car il s'agit de distribuer des éléments aléatoirement, puis de les "repousser" à une distance donnée.
Dernière modification par bru ; 15/03/2015 à 18h09.
A l'occasion de ce petit "challenge" j'ai évidement été jeter un œuil sur la toile, et ce qui en ressort est étonnant.
Le problème de la distribution des points sur une sphère est proche de celui des empilement compacts et c'est manifestement très, mais alors TRÈS complexe.
Quatre siècles pour démontrer (ce qui parait évident) que l'arrangement de fruit en quinconce sur un étal est la meilleure façon d'économiser l'espace.
C'est la conjecture de Kepler, Officiellement reconnu "prouvé" en 2014.
voir ici
Pour le problème de la distribution régulière sur une sphère je crois bien que c'est impossible d'un point de vue mathématique.
Mais il y a différente méthodes pour y arriver. Ce lien intéressant en donne plusieurs
Dernière modification par Floc ; 15/03/2015 à 22h20.
coucou
il y a aussi cette piste pour le remplissage :
http://www.autopack.org
mais ça peut faire mal au crane...
a suivre ...