J'ai besoin d'une clarification avec l'algorithme générant des valeurs aléatoires pour mon Ray-traceur pour animaux de compagnie.
J'éprouve des rayons d'un point. Et j'ai le problème de la distribution de ces rayons: j'ai besoin de la distribution pour être uniforme, mais ce n'est pas ... p>
Le problème que je veux faire face maintenant est que la distribution étant uniforme initialement n'est pas uniforme après mes distorsions de l'espace des résultats. p>
Donc, par exemple, je génère des angles R et T si le système de coordonnées polaires. La distribution n'est pas uniforme et elle ne peut pas être uniforme: l'espace proche de chaque pôle a beaucoup plus de densité de résultats que, par exemple, près de l'équateur. La raison est assez claire: je convertit des points uniformément distribués de l'espace cylindrique au sphérique. Et je déforme les résultats. Le même problème est que si je normalise les points générés au hasard dans le cube. p>
Mon idée est maintenant ceci: je veux créer un tétraèdre, normaliser ses sommet, diviser chaque visage (triangle) avec le point au milieu, le normaliser et répéter récursivement jusqu'à ce que j'ai suffisamment de points. Ensuite, je "distorsure" ces points un peu. Ensuite, je les normalise à nouveau. C'est ça. p>
Je comprends que cette méthode n'est pas pure méthode mathématique MONTE-Carlo elle-même, car je n'utilise pas une distribution aléatoire dans aucune étape, à l'exception du dernier. Et je n'aime pas cette solution pour cette complexité. p>
Quelqu'un peut-il suggérer quelque chose de plus simple mais toujours p>
merci! p>
edit: strong>
J'ai besoin d'une méthode rapide, pas seulement de la bonne. C'est pourquoi je demande à Monte-Carlo. Les réponses fournies sont correctes, mais pas rapidement. La méthode avec tétraèdre est rapide, mais pas très "aléatoire" => incorrecte.
J'ai vraiment besoin de quelque chose de plus approprié. P>
5 Réponses :
Les réponses de liaison seules sont découragées
pour une sections sphériques génère votre angle uniformément dans Dans pseudo code: p> Il s'agit d'un cas particulier de la règle qui dit inverti le jacobien et générer uniformément dans cet espace de ces coordonnées em>. p> Remarque: Notez que j'utilise la convention opposée pour PHI et thêta de David Norman Line. P> Remarque également: Ce n'est pas la méthode la plus rapide, mais plutôt celle qui illustre le principe général. P> P> phi code> (l'angle polaire) et
cos (theta) code> (pour thêta l'angle azimutal) entre vos limites.
Sauf si vous ne rayonnez que des scènes triviales, votre temps de rendu sera-t-il vraiment dominé par l'échantillon de temps de sélection? Sinon, il ne vaut probablement pas la peine d'être optimisé, même s'il vaut la peine de lire et de comprendre les techniques d'échantillonnage uniforme données dans les autres réponses. P>
En outre, vos échantillons ne doivent pas nécessairement être très aléatoires pour produire une bonne estimation de la fonction que vous échantillonnez. Vous voudrez peut-être étudier à l'aide d'une séquence numéro de quasiRandom, telle que le Séquence Halton A >. Votre idée de subdivision de tétraédron n'est pas mauvaise. Il devrait aboutir à de beaux points bien distribués qui devraient être meilleurs que les échantillons de pseudo-pseudorandom uniformes pour la plupart des scènes, bien que cela puisse entraîner des artefacts horribles dans certaines circonstances. P>
Quoi qu'il en soit, vous devriez vraiment consulter les forums à ompf.org. Vous avez des nerds de rayonnage super hardcore là-bas. p>
Voici une implémentation Java que j'ai utilisée dans le passé:
@Douglaszare si d2
1.0 / d2 code> peut déborder
Avez-vous vraiment besoin d'une distribution aléatoire ou d'une distribution uniforme sur la sphère? P>
Ensuite, je suggérerais des angles de ZCW, qui sont également distribués sur toute la sphère et de calculer rapidement. Les autres méthodes sont thesydneyOperaRaHouse (Sophe) et répulsion. (Recherche de répulsion.c) La méthode de répulsion est assez bonne mais lente: elle distribue de manière itérative les points uniformément sur une sphère. Heureusement, cela ne doit être fait qu'une fois. P>
Ceci est utilisé dans la cristallographie et la RMN, car pour les motifs de poudre, il est plus rapide d'utiliser une distribution uniforme par rapport à une distribution aléatoire (vous avez besoin de moins de points). P>
ici est une implémentation de Python pour ZCW. p>
Plus de détails dans ces papiers: P>