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

MATLAB Discussion :

Nuage de points dans un disque


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 27
    Points
    27
    Par défaut Nuage de points dans un disque
    Bonjour,

    Je cherche à créer un nuage de points représentant la Voie Lactée. Pour ce faire je souhaiterais placer aléatoirement des milliers de points afin que ceux-ci en prennent la forme.
    Je ne sais pas comment m'y prendre... Merci d'avance !

  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 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Aurais-tu une image de ce que tu cherches à obtenir ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Pour générer un nuage dans un disque, génère le rayon et l'angle en coordonnées polaires.

    représentant la Voie Lactée
    Ca me semble plus compliqué qu'un simple cercle. J'imagine qu'on pourrait implémenter des modèles de création de l'univers / création d'astres par gravité, puis dessiner ce qu'un observateur voit en un point... Peut être trop ambitieux.

    La vraie difficulté, c'est de traduire en terme de distribution (loi marginale du rayon, support borné ou pas, isotropie- ie indépendance rayon/angle...) les propriétés supposées de l'objet que tu cherches à représenter.

    Si on ne connait pas les propriétés finales, on peut aussi simuler la dynamique: par exemple pars d'une uniforme sur un disque, fais agir la gravité +un moment de rotation et regarde ce que ça donne après un temps long.

    Bref il faut surement se documenter sur le sujet

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 27
    Points
    27
    Par défaut
    Non, pas vraiment, mais simplement un cercle avec une épaisseur.
    Ici, mon code forme un nuage en forme de sphère autour de l'origine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Origine = [0,0,0];
     
    Exo = 1+(15000-1)*rand(10000,1);
     
    Vectors = randn(length(Exo),3);
    norms = sqrt(sum(Vectors.^2,2));
    Vectors = bsxfun(@rdivide,Vectors,norms);
    Vectors = bsxfun(@times,Vectors,Exo);
    Vectors(end,:) = 0;
     
    P = bsxfun(@plus, Vectors, Origine);
     
    plot3(P(:,1),P(:,2),P(:,3),'.')
    Je voudrais que l'origine soit le centre du disque avec les points s'étalant autour selon cette forme de disque.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 27
    Points
    27
    Par défaut
    Oulala merci VV3D mais je ne pense pas avoir les compétences pour créer une vraie galaxie !
    Un simple disque rappelant sa forme suffira !
    Par contre pourrais-tu détailler ?
    Génère le rayon et l'angle en coordonnées polaires

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Pour générer uniformément dans un disque, génère:
    - r uniforme sur [0,R]
    - a uniforme sur [0 2pi]
    - z uniforme sur [z1,z2]
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    z= z1 + (z2-z1)*rand(Npoint,1)
    passe r,a en cartésien via
    x= r cos(a)
    y= r sin(a)

    et voila (x,y,z) uniforme sur le disque.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 27
    Points
    27
    Par défaut
    Merci mais concrètement, même après recherches, je n'y arrive pas. Je comprends tes équations mais comment les appliquer réellement ?

  8. #8
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Ou bloques-tu ? Montre nous le code qui pose problème.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 27
    Points
    27
    Par défaut
    En réalité je ne sais même pas par où commencer

  10. #10
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    Salut, alors pour la génération de nombre aléatoires, je te conseille de faire un petit
    rand(1,N) génère un vecteur de N nombres aléatoires entre 0 et 1

    Ensuite, petit point de géométrie que t'avait donné VV33D : Un point dans un disque de rayon R est donné par

    x = r*cos(theta)
    y = r*sin(theta)

    avec 0<r<R et 0<theta<2*Pi

    tu veux placer N points aléatoires dans ce disque de rayon R.

    il te faut donc tirer un vecteur de N valeurs aléatoires équireparties entre 0 et R, qui représente tes valeurs r

    tu tires aussi un vecteur de N valeurs aléatoires theta equireparties entre 0 et 2*Pi, en suivant l'exemple juste au dessus.

    tu retrouves ensuite les coordonnées (x,y) de tes N points avec les fameux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x = r.*cos(theta)
    y = r.*sin(theta)
    et le tour est joué.

    VV33D te proposait également de tirer une coordonnée z si tu travaille en 3D et souhaite faire l'approximation disque = cylindre mince.

    Voila, dis nous si tu y arrives

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 27
    Points
    27
    Par défaut
    Merci beaucoup, je pense avoir réussi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    N = 10000;
     
    r = 15000*rand(1,N);
     
    theta = (2*pi)*rand(1,N);
     
    x = r.*cos(theta);
    y = r.*sin(theta);
    z = 150*rand(1,N);
     
    plot3(x, y, z, '.');

  12. #12
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    J'ai des doutes sur l'uniformité qui en résulterait sur le disque

    Dehttp://fr.wikipedia.org/wiki/Loi_uniforme_continue
    Condition suffisante — La loi de la variable aléatoire Y=T(X), image, par une transformation T, d'une variable X uniforme sur une partie A de \scriptstyle\ \R^{d},\ est encore la loi uniforme sur T(A) si T est, à un ensemble négligeable près, injectif et différentiable, et si, presque partout sur A, la valeur absolue du jacobien de T est constante.
    Or le jacobien du passage en coord. polaire vaut r et n'est pas constant.

    Ca ne me semble pas très grave vu que tu ne savais pas quelle loi utiliser. La loi qui en résulte ne semble pas trop stupide non plus.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 27
    Points
    27
    Par défaut
    Non effectivement, j'ai remarqué que ce n'était pas parfaitement uniforme mais ce n'est pas grave du tout. Pour ce que j'ai à faire ce n'est qu'un infime détail.

  14. #14
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    Ben c'est pas si grave vu que dans la majorité des galaxies, le centre est plus densément peuplé que la périphérie

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 27
    Points
    27
    Par défaut
    Oui justement, cette "erreur" semble plutôt être bénéfique !

  16. #16
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Pour générer l'uniforme, la densité du rayon doit être proportionnelle à r, ie
    f_rayon(r) = 2*r /Rmax^2. la fonction de répartition est facilement inversible, donc c'est faisable efficacement via F^-1(Uniforme)

    Une autre solution, générer uniformément dans le carré puis restreindre au cercle (un nombre aléatoire de données donc). Attention, ici la proba de rejet -> 1 avec la dimension ambiante, donc peu efficace en grande dimension (mais convenable en dimension 2).

    PS: pourquoi ne puis-je pas éditer mon post contenant l'erreur ?

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 27
    Points
    27
    Par défaut
    Merci pour ton aide, je vais tout de même tester avec une uniformité.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/09/2008, 19h13
  2. reconnaissance courbe dans nuage de points
    Par Elodie31 dans le forum Mathématiques
    Réponses: 4
    Dernier message: 25/06/2008, 08h27
  3. Réponses: 6
    Dernier message: 02/04/2008, 11h42
  4. Help : changer la couleur d'une point dans un Nuages de point
    Par yukka dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/05/2007, 11h30
  5. nuages de points sont-ils dans une zone??
    Par smedini dans le forum Algorithmes et structures de données
    Réponses: 26
    Dernier message: 21/02/2006, 11h01

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