nombre aleatoire - Algo - Programmation
Marsh Posté le 14-12-2005 à 18:56:15
et google,
répéter N fois :
tirer trois nombres au hasard entre -1 et 1, appellons les x,y et z.
si x²+y²+z² est inférieur ou égal à 1 alors
diviser x,y et z par la racine carrée de (x²+y²+z²) sinon relancer le tirage.
Marsh Posté le 15-12-2005 à 15:43:34
C'est beaucoup trop long comme methode et en prenant le x²+y²+z² <=1 j aurai aussi des points dans la sphere
Marsh Posté le 15-12-2005 à 16:06:12
ben non (aux erreurs d'arrondi près)
car tu normalises ton vecteur (tu le divises par un scalaire <=1.0 donc tu l'aggrandis juste ce qu'il faut)
quelles sont tes contraintes au juste ?
Marsh Posté le 15-12-2005 à 16:13:40
et avec deux nombres aleatoire phi et teta compris entre 0 et 2 Pi, tu as un point sur la sphere (en utilisant des coordonnées spheriques quoi) ?
(en plus comme ca, tu es sur d'avoir une distribution homogene, je sais pas pourquoi, mais le coup de la somme des carrés ne m'inspire pas confiance en terme de distribution homogene sur la surface de la sphere (j'en suis pas sur, mais vu que diviser par la racine carrée de la somme revient a faire une projection du cube sur la sphere, je me dis que c'est pas homogène ) )
Marsh Posté le 15-12-2005 à 16:18:21
la distribution est uniforme avec ma méthode, le tout c'est d'ignorer les points mal distribués.
je viens de tester sur un vieux Celeron ça génère plus de 1.000.000 points/sec (avec rand qui -on le sait- est optimisable d'un facteur 13)
Marsh Posté le 15-12-2005 à 16:25:27
fra0 a écrit : la distribution est uniforme avec ma méthode, le tout c'est d'ignorer les points mal distribués. |
exact, c'est uniforme, j'avais pas tilté sur le coup du "inferieur ou egal à 1, sinon on relance"
n'empeche que c'est un peu stupide d'effectuer des tirages pour rien ("sinon on relance" ) ET de prendre un point au pif dans une boule pour finalement projeter la chose sur une sphere, je pense que ma methode est quand meme mieux et plus logique vu qu'on prend directement le point sur une sphere et qu'on accepte tous les tirages, mais ca n'engage que moi
Marsh Posté le 15-12-2005 à 16:30:41
ben regardons: toi, tu tires 3 nombres au hasard, tu fais la somme des carrés, si c'est inferieur ou egal a 1 tu divises chacun de tes trois nombre par la racine carrée de la somme de tes carrés sinon tu jettes et tu recommences. et hop tu as ton point sur la sphere.
moi je tire deux nombres au hasard et hop j'ai mon point sur la sphere
lequel est le moins complexe ?
(je dis ca, j'ai rien prouvé ni testé hein, c'est juste mon petit doigt qui me le dit )
Marsh Posté le 15-12-2005 à 16:34:28
ou tu places tes 5 ou 6 appels aux fonctions trigo sur ton échelle de complexité ?
Marsh Posté le 15-12-2005 à 16:38:01
oui , prendre deux nombres phi et teta compris entre 0 et 2pi aleatoirement, puis utiliser des formules de conversions :
(par exemple : je ne m en souviezns plus mais ca doit etre ca)
x = cos phi*cos teta
y = sin phi*cos teta
z = sin teta
x2+y2+z2=cos2 phi*cos2 teta + sin2 phi*cos2 teta + sin2 teta
=cos2 teta (cos2 phi + sin2 phi)+ sin2 teta = 1 donc c est bon
Marsh Posté le 15-12-2005 à 16:45:09
si on tire deux anlges aleatoires ce n est pas uniforme car ta densite de probabilite est :
sin(teta)d(teta)d(phi)
Donc si tu tires un teta uniforme, ta distribution ne sera pas uniforme
Marsh Posté le 15-12-2005 à 16:48:38
fra0 a écrit : ou tu places tes 5 ou 6 appels aux fonctions trigo sur ton échelle de complexité ? |
<excuse foireuse>
il a juste demander de tirer aleatoirement des points sur une sphere, apres je sais pas comment il l'utilise. Moi je repondais juste à son probleme
</excuse foireuse>
nan mais serieux, ca depend de ce qu'il y a autour, si ca se trouve il veut travailler en coordonnées spheriques, auquel cas c'est à ton algo que les calculs trigo viennent se greffer.
Marsh Posté le 15-12-2005 à 16:50:16
ford_escort a écrit : si on tire deux anlges aleatoires ce n est pas uniforme car ta densite de probabilite est : |
bon, je vais definitivement sortir par la petite porte du topic moi
ca m'apprendra à écouter mon intuition en proba (et pourtant je le sais que les probas spa mon truc
fra0
Marsh Posté le 15-12-2005 à 16:59:22
ford_escort a écrit : si on tire deux anlges aleatoires ce n est pas uniforme car ta densite de probabilite est : |
explique mieux la.... j ai des vieux souvenirs de math sup... mais la j pîge pas...
la methode des deux angles donne en fait un vecteurs 3D avec une distribution totalement uniforme ! les formules trigo servent juste a le normaliser... si je prends le probleme plus simple de tirer un point sur un cercle.... tu prends un angle a au hasard entre 0 et 2pi... x=cos a et y=sin a donne ses coordonnées. ce tirage est parfaitememnt uniforme !
Marsh Posté le 15-12-2005 à 17:14:29
Madking a écrit : |
ben en fait c'est simple (et oui, c'est moi qui dit ca hum... )
fixe ton teta a 0 et prend phi au hasard, et regarde la distribution possible
puis fixes ton teta a pi/2 et prend phi au hasard, compare a ta distribution precedente et demande toi si c'est homogene
(spa comme ca qu'il faut le prouver, mais ca donne une idee du pourquoi j'ai fait la meme erreur d'intuition )
Marsh Posté le 15-12-2005 à 18:30:13
Je vous conseille très très fortement de lire la page de mathworld (en anglais), sur ce problème :
http://mathworld.wolfram.com/SpherePointPicking.html
Il s'agit surement d'un bon récapitulatif sur ce problème, toujours sujet à de nombreuses erreurs.
Cordialement,
nathan_g
Marsh Posté le 15-12-2005 à 19:29:58
nathan_g a écrit : Je vous conseille très très fortement de lire la page de mathworld (en anglais), sur ce problème : |
merci
Marsh Posté le 14-12-2005 à 12:47:49
Bonjour
est ce que qq un connait un algo qui permet de faire un tirage aleatoire homogene sur la surface d une sphere
merci