Générer une coordonnée aléatoire dans une épaisseur de cube
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Générer une coordonnée aléatoire dans une épaisseur de cube



  1. #1
    ElPierre

    Générer une coordonnée aléatoire dans une épaisseur de cube


    ------

    Bonjour.

    Dans mon problème j'imagine une boite cubique dont les bords ont une certaine épaisseur, j'aimerais générer des particules sur des points aléatoirement choisis de cette épaisseur.

    Imaginons un cube d'arête 'a' et à l'intérieur de celui-ci un cube d'arête , je m'intéresse donc à la couche d'épaisseur epsilon entre les 2 cubes.
    Comment feriez-vous pour générer une position aléatoire sur cette couche ? Passer par une équation avec une fonction de densité (Pour une sphère je sais faire mais là je patauge)? Générer aléatoirement dans le cube 'a' et tuer toutes les positions tirées à l'intérieur de 'TEX]a-2*\epsilon[/TEX]' ?

    Merci!

    -----

  2. #2
    gg0
    Animateur Mathématiques

    Re : Générer une coordonnée aléatoire dans une épaisseur de cube

    Bonjour.

    Tout dépend du but et de ce que va vouloir dire "aléatoirement". Si est très faible, et que l'équirépartition parfaite n'est pas nécessaire, on tire une face au hasard, puis dans cette face, repérée par un repère passant par deux arêtes successives un couple de nombres pris chacun au hasard entre 0 et a. Puis on prend le point avec la profondeur , ou si on veut raffiner, une profondeur au hasard entre 0 et .

    Si on veut une équirépartition parfaite, on va raffiner le procédé, en décomposant la boite en une série de parallélépipèdes rectangles, choisissant l'un d'entre eux avec pour chacun une probabilité proportionnelle à son volume, puis un point pris au hasard dans ce parallélépipède.

    Cordialement.

  3. #3
    ElPierre

    Re : Générer une coordonnée aléatoire dans une épaisseur de cube

    Je ne considère pas un epsilon faible. L'épaisseur a toute son importance dans le problème. Et par "aléatoirement" j'entends : tirer une coordonnée uniformément.
    La deuxième solution que vous proposez me parait produire un résultat uniforme mais j'y avais aussi pensé et je pensais trouver une méthode plus simple (*).

    Je considère bien votre solution de tirer une face au hasard, j'y ai moi même pensé mais il n'est pas possible géométriquement parlant de découper mon problème en 6 face car il y'a des problèmes vers les arêtes (ça demande quelques secondes d'imagination :^) ).

    Pour rééxpliquer clairement mon problème même si je pense que vous l'avez compris, je considère "un cube creux d'épaisseur epsilon" et l'idée est de tirer des coordonnée dans cette épaisseur, cette épaisseur/couche/coque/layer/bounding est donc délimité par deux surfaces fermées (S_ext et S_int).

    Question : J'avais fais une tentative en tirant uniformément des coordonnée à l'intérieur de S_ext et en recommençant tant que le point tiré était à l'intérieur de S_int, est-ce que la répartition finale vous semble uniforme dans l'épaisseur ? Je n'arrive pas vraiment à le vérifier et me demande si je ne dois pas normaliser quelque chose...
    Merci.

    (*) Si vous avez une piste de mise en équation du problème je suis preneur ^^'
    Dernière modification par ElPierre ; 25/06/2021 à 15h46.

  4. #4
    ElPierre

    Re : Générer une coordonnée aléatoire dans une épaisseur de cube

    On peut trouver le sujet en anglais. "random coordinates inside bounded region", cas général où l'on cherche à générer des points dans la "coque fermée" d'une géométrie. La solution proposée sur les forums anglophones est de générer uniformement des points sur un cube entourant la géométrie (la bounded region). Mais ... cela me dérange ... comment être certain que la répartition est suffisamment uniforme ?

  5. A voir en vidéo sur Futura
  6. #5
    gg0
    Animateur Mathématiques

    Re : Générer une coordonnée aléatoire dans une épaisseur de cube

    Bonjour.

    "J'avais fais une tentative en tirant uniformément des coordonnée à l'intérieur de S_ext et en recommençant tant que le point tiré était à l'intérieur de S_int, est-ce que la répartition finale vous semble uniforme dans l'épaisseur ? Je n'arrive pas vraiment à le vérifier et me demande si je ne dois pas normaliser quelque chose..." C'est la classique méthode de rejet. C'est aussi la solution proposée dans ton message #4.
    La méthode de rejet donne des répartitions uniformes si on part d'une répartition uniforme dans le domaine englobant : est proportionnel au volume de dans le cube entier donc aussi dans la coque.Le problème est que s'il faut beaucoup de calculs pour savoir si le point "est bon" et si on en rejette beaucoup, ça peut prendre un temps important.

    La méthode que je t'ai proposée (décomposition en 8 cubes de coin, 12 parallélépipèdes d’arêtes et 6 parallélépipèdes de faces - ou 2 "faces complètes" et 4 "faces incomplètes", ou autres) a l'inconvénient d'être peu généralisable, un peu pénible à programmer, mais rapide, puisque tous les points servent. Elle n'a un intérêt que si le volume de la coque est faible par rapport à celui du cube donc très petit par rapport à a (pour on rejette environ une fois sur 2, le volume intérieur fait 51,2% du volume total).

    Cordialement.

Discussions similaires

  1. générer un nombre/suite aléatoire
    Par RandomBanana dans le forum Programmation et langages, Algorithmique
    Réponses: 51
    Dernier message: 19/04/2017, 14h38
  2. Générer un nombre aléatoire pour µC
    Par jeym21 dans le forum Électronique
    Réponses: 7
    Dernier message: 02/03/2014, 19h46
  3. générer un nombre aléatoire en fortran
    Par bbdoll dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 06/08/2012, 08h59
  4. comment générer une tension aléatoire?
    Par invite3dff7c63 dans le forum Électronique
    Réponses: 6
    Dernier message: 26/03/2008, 12h46
  5. Générer un entier aléatoire en C++
    Par invite234d9cdb dans le forum Logiciel - Software - Open Source
    Réponses: 23
    Dernier message: 16/10/2006, 19h57