Tirer une point aléatoire dans cercle sur une sphère

Tirer une point aléatoire dans cercle sur une sphère - Algo - Programmation

Marsh Posté le 11-04-2008 à 10:33:49    

Bon alors je m'explique.
J'ai une sphère céleste de rayon r=1. Sur cette la surface sphère il y a plein de cercles de rayon 1.49 degrès. Mon algorithme est le suivant :  
1) Je tire au hasard un des cercles et je note les coordonnées de son centre (1,raC,decC).
2) Dans ce cercle je tire un point au hasard
3) Je vérifie que le point est bien dans le cercle
4) je recommence l'opération.
 
Alors mon problème c'est que ce tirage n'est pas du tout homogène. Les points ont tendance à concentrer au centre du cercle. Si vous avez une idée pour m'aider.
Merci


Message édité par Phoenix407 le 11-04-2008 à 10:34:24
Reply

Marsh Posté le 11-04-2008 à 10:33:49   

Reply

Marsh Posté le 11-04-2008 à 10:37:21    

Juste pour être un peu tatillon : quand tu parles de cercle, tu ne veux pas plutôt parler de disque ?
(Cercle = juste un contour / Disque : Une surface délimitée par le cercle)


Message édité par babasss le 11-04-2008 à 10:37:55

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 11-04-2008 à 10:38:08    

Rien compris. [:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 11-04-2008 à 10:41:56    

oui, je tire dans un disque, pardon me suis mal exprimé

Reply

Marsh Posté le 11-04-2008 à 10:46:31    

Moi j'ai plusieurs questions:
1) Comment tu obtiens des disques à la surface d'une sphère? Les disques c'est de la 2D, et la surface d'une sphère n'est pas plane...[:autobot]
2) Comment ça, tu vérifies que le point est bien dedans? Si tu tires un point du disque, tu tires un point du disque...[:pingouino]
3) C'est quoi, "recommencer l'opération"?[:autobot]
4) Comment tu vois que le tirage n'est pas homogène, si ce n'est qu'un algo?[:petrus dei]


Message édité par skeye le 11-04-2008 à 10:49:50

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 11-04-2008 à 10:51:34    

pourquoi passer par un disque plutot que de taper directement dans la sphère ?
En coordonnées polaires, il te suffit de faire 3 randoms sur ρ, φ (0-180), θ(0-360)


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 11-04-2008 à 10:53:37    

Bon je v expliquer mieux
Alors on a la sphère céleste. Sur cette sphère on dessine un dessine plusieurs disques de rayon r=1.49, et chaque disque comporte un numéro.
Dans mon algorithme :
1) Je tire au hasard le numéro d'un disque et je note les coordonnée équatoriales du centre de ce disque : à savoir l'ascension droite et la déclinaison (raC et decC)
2) Je m'arrange pour tirer un point au hasard dans ce disque, c'est à dire je tire une ascension droite et une déclinaison hasard à l'intérieur de ce disque (raR et decR). Ce tirage de point doit être une distribution uniforme.
Or dans l'algorithme que j'utilise, je dis que  
raR = raC + 2*1.49*(aa-0.5) où aa est un nombre tiré entre 0 et 1
decR = decC + 2*1.49*(aa'-0.5) où aa' est un autre nombre tiré etre 0 et 1
Et lorsque je visualise l'ensemble des points, il y a beaucoup de trou et la distribution n'est pas uniforme.
J'espère avoir été un peu plus clair

Reply

Marsh Posté le 11-04-2008 à 10:54:53    

Je passe par des disques, parce que je ne veux pas tirer sur toute la sphère, seulement sur une partie dont la géométrie est très compliquée. Seuls les disques me permettent de reconstituer cette géométrie

Reply

Marsh Posté le 11-04-2008 à 10:56:15    

Tu utilises quoi pour le tirage?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 11-04-2008 à 11:01:15    

Problème de random seed?
Problème de loi de tirage aléatoire?

Reply

Marsh Posté le 11-04-2008 à 11:01:15   

Reply

Marsh Posté le 11-04-2008 à 11:01:30    

je fais mon prog en fortran et j'utilise la fonction rand()

Reply

Marsh Posté le 11-04-2008 à 11:20:57    

Le problème, c'est ta méthode :

  • ce que tu fais, c'est que tu tires suivant des coordonnées x et y et aprés tu vérifies si le point est dans le cercle ou non => environ 78% de fois vrai (donc tes stats sont tronqués)
  • ce qu'il faudrait faire, c'est de tirer suivant les coordonnées r et théta. Là ce serait parfait


Edit : r et théta sont les coordonnées cylindriques. Donc tu tires aa et ab (entre 0 et 1) et tu fais :
  x = r*aa*cos(théta*ab)
  y = r*aa*cos(théta*ab) avec r = rayon du disque et théta = 360° (ou 2*Pi radian)


Message édité par babasss le 11-04-2008 à 11:36:01

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 11-04-2008 à 11:23:58    

je sais bien, mais comment je fais, me creuse la tête depuis 2 semaines et j'arrive pas à trouver une méthode efficace

Reply

Marsh Posté le 11-04-2008 à 11:34:35    

Je reprends ton message en le modifiant :
J'ai une sphère céleste de rayon r=1. Sur cette la surface sphère il y a plein de cercles de rayon 1.49 degrès. Mon algorithme est le suivant :  
1) Je tire au hasard un des cercles et je note les coordonnées de son centre (1,raC,decC).
2) Dans ce cercle je tire deux chiffres entre 0 et 1 notés p1 et p2
3) Je calcule le point résultant avec la formule : x = r*p1*cos(théta*p2) et y = r*p1 et cos(théta*p2) (ou r = rayon de ton disque et théta = 360° (ou 2*Pi radian)
3annulé) Je NE vérifie PAS que le point est bien dans le cercle parceque c'est toujours le cas avec la méthode ci-dessus
4) je recommence l'opération.


Message édité par babasss le 11-04-2008 à 11:36:15

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 11-04-2008 à 11:51:41    

ok merci, mais c'est long comme algorithme. Je dois tirer 81000 points, tu as une idée du temps que ça prends?

Reply

Marsh Posté le 11-04-2008 à 13:42:14    

Phoenix407 a écrit :

ok merci, mais c'est long comme algorithme. Je dois tirer 81000 points, tu as une idée du temps que ça prends?


Je comprends pas trop. L'algorithme, c'est toi qui l'a proposé à ton premier post, je ne fais que l'adapter pour la nouvelle situation. La phrase ci-dessus laisse entendre que tu n'as pas programmé l'algorithme alors que ton premier post laisse entendre le contraire. Où est la vérité ?


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Sujets relatifs:

Leave a Replay

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