Tirer une point aléatoire dans cercle sur une sphère - Algo - Programmation
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)
Marsh Posté le 11-04-2008 à 10:38:08
Rien compris.
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...
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...
3) C'est quoi, "recommencer l'opération"?
4) Comment tu vois que le tirage n'est pas homogène, si ce n'est qu'un algo?
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)
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
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
Marsh Posté le 11-04-2008 à 10:56:15
Tu utilises quoi pour le tirage?
Marsh Posté le 11-04-2008 à 11:01:15
Problème de random seed?
Problème de loi de tirage aléatoire?
Marsh Posté le 11-04-2008 à 11:01:30
je fais mon prog en fortran et j'utilise la fonction rand()
Marsh Posté le 11-04-2008 à 11:20:57
Le problème, c'est ta méthode :
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)
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
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.
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?
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é ?
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