nombre aleatoire

nombre aleatoire - Algo - Programmation

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

Reply

Marsh Posté le 14-12-2005 à 12:47:49   

Reply

Marsh Posté le 14-12-2005 à 17:43:41    

Paul Bourke

Reply

Marsh Posté le 14-12-2005 à 18:40:01    

et?

Reply

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.

Reply

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

Reply

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 ?

Reply

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) ? [:petrus75]
 
(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 [:dawa] ) )

Reply

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)

Reply

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.
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)


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  [:souk]  
 
 [:klem3i1]

Reply

Marsh Posté le 15-12-2005 à 16:26:34    

je te suggère un test en pratique

Reply

Marsh Posté le 15-12-2005 à 16:26:34   

Reply

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 ? [:petrus75]
(je dis ca, j'ai rien prouvé ni testé hein, c'est juste mon petit doigt qui me le dit [:pingouino] )

Reply

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é ?

Reply

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

Reply

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

Reply

Marsh Posté le 15-12-2005 à 16:46:53    

goto -11

Reply

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 [:joce]
</excuse foireuse>
 
 http://cheznous.mesdiscussions.net/icones/smilies/speed.gif
 
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.  [:klem3i1]

Reply

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 :
sin(teta)d(teta)d(phi)
Donc si tu tires un teta uniforme, ta distribution ne sera pas uniforme


 
bon, je vais definitivement sortir par la petite porte du topic moi  :whistle:  
ca m'apprendra à écouter mon intuition en proba (et pourtant je le sais que les probas spa mon truc  [:dawa_neowen]
 
fra0 [:romf]


Message édité par souk le 15-12-2005 à 16:51:11
Reply

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 :
sin(teta)d(teta)d(phi)
Donc si tu tires un teta uniforme, ta distribution ne sera pas uniforme


 
 
 :pt1cable:  
 
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 !

Reply

Marsh Posté le 15-12-2005 à 17:14:29    

Madking a écrit :

:pt1cable:  
 
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 !


 
ben en fait c'est simple (et oui, c'est moi qui dit ca hum... [:dawa] )
 
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 [:dawa] j'ai fait la meme erreur d'intuition  :cry: )
 
 
 
 
 
 http://cheznous.mesdiscussions.net/icones/smilies/speed.gif

Reply

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

Reply

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 :
 
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


 
:love: merci [:romf]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed