IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

générer points aléatoires dans sphère


Sujet :

Mathématiques

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut générer points aléatoires dans sphère
    Bonjour,
    je cherche generer des points dans une sphere de rayon 1
    puis a calculer la distrubution de ces points dans cette sphere.
    C'est simple et je bloque !

    Il pensais faire comme ca:
    - generer une matrice n x 3 (n=10 000par ex) de points entre -1 et +1.
    Cela represente les coordonnees x,y,z de 10 000 points contenu dans une sphere de rayon 1 et de center 0,0,0.

    - pour chaque point, calculer la distance entre ce point et le centre de la sphere.
    - faire un histogramme

    mon code preliminaire me donne des distances plus grande que 1 ! Je ne comprends pas. aussi, je n'ai generer ici que des points entre 0 et 1 car je ne sais pas faire entre -1 et 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    close all
    clear all
    clc
     
    n=100
    r=rand(n,3)
    temp=[];
    for i=1:n
        d=sqrt((r(i,1))^2+(r(i,2))^2+((r(i,3)))^2);
        temp=[temp;d];
    end
    temp
    Merci de me dire ou est l'erreur !!

    Judith

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 307
    Points : 52 887
    Points
    52 887
    Par défaut
    Citation Envoyé par judithh Voir le message
    - generer une matrice n x 3 (n=10 000par ex) de points entre -1 et +1.
    Cela represente les coordonnees x,y,z de 10 000 points contenu dans une sphere de rayon 1 et de center 0,0,0.
    Cela génère des points contenus dans un cube de coté 1 et non pas dans une sphère.

    Tu dois générer tes points en coordonnées sphériques et non pas en coordonnées cartésiennes.

  3. #3
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Comme ton problème ne dépend pas du langage de programmation, je déplace cette discussion dans le forum algo/maths.
    Jean-Marc Blanc

  4. #4
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    En fait, ton problème n'est qu'incomplètement formulé. Je suppose, ce que tu n'as pas précisé, que tu cherches une répartition uniforme des points. On peux imaginer deux cas:
    1. Comme Dut te l'a proposé, tu travailles en coordonnées sphériques. De cette manière, tu auras 10% des points pour [0,0 < r < 0,1] et 10% des points pour [0,9 < r < 1,0], ce qui signifie que tes points seront beaucoup plus concentrés près du centre de ta sphère que vers l'extérieur.
    2. Tu peux aussi travailler en coordonnées cartésiennes: tu obtiens des points uniformément répartis dans [-1 < x < 1], [-1 < y < 1] et [-1 < z < 1] puis tu exclus tous ceux pour lesquels x^2 + y^2 + z^2 > 1.

    D'autre part, la fonction rand génère des nombres aléatoires compris entre 0 et 1; si tu veux des nombres compris entre -1 et 1, tu les multiplies par 2 puis tu soustrais 1.
    Jean-Marc Blanc

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par judithh Voir le message
    Bonjour,
    je cherche generer des points dans une sphere de rayon 1
    puis a calculer la distrubution de ces points dans cette sphere.
    C'est simple et je bloque !
    Bonjour



    Générer des points uniformément distribués sur une portion de sphère



    Citation Envoyé par judithh Voir le message
    mon code preliminaire me donne des distances plus grande que 1 ! Je ne comprends pas. aussi, je n'ai generer ici que des points entre 0 et 1 car je ne sais pas faire entre -1 et 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    n=100
    r=rand(n,3)
    temp=[];
    for i=1:n
        d=sqrt((r(i,1))^2+(r(i,2))^2+((r(i,3)))^2);
        temp=[temp;d];
    end
    temp
    Merci de me dire ou est l'erreur !!
    déjà ton rand est à l'extérieur de la boucle.. Donc problème...

    Ensuite, r=1 => sqrt(3) => erreur

  6. #6
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x=randn(n,3);
    x=diag(rand(n,1))*diag(diag(x*x'))^-0.5*x;
    temp=diag(x*x').^0.5;
    Avec ça, tu as des vecteurs dont la norme et la direction sont uniformément répartis.

    Si tu souhaites introduire un biais concernant le fait que tes points devraient être tirés directement avec des coordonnées non polaires, ben, il faut jouer sur le rand(n,1).

    Tu peux aussi t'amuser à changer quelques trucs, mettre d'autres lois. C'est rigolo.

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/05/2012, 17h56
  2. Générer nombre aléatoire dans boucle
    Par dvp_zero dans le forum Débuter
    Réponses: 2
    Dernier message: 12/07/2011, 18h21
  3. Générer nombre aléatoire dans un label
    Par Remus91 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/03/2009, 02h32
  4. générer un texte aléatoire dans une frame
    Par cecilecedric dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/12/2008, 22h30
  5. Générer un nombre aléatoire dans un intervalle
    Par polodu84 dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/03/2008, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo