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

Algorithmes et structures de données Discussion :

Propagation lumière par rayon tableau 2D


Sujet :

Algorithmes et structures de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 197
    Points : 89
    Points
    89
    Par défaut Propagation lumière par rayon tableau 2D
    Bonjour,
    je suis coincé sur un problème,
    J’essai de propager de la lumière sur un damier 2D, le damier est constitué d’une source lumineuse et de mur.
    Les rayons lumineux se propagent de la source lumineuse en ligne droite et ne peuvent pas traverser les murs.

    Je n’ai pas d’idée pour déterminer les positions du tableau qui sont dans la ligne de mire de la source lumineuse.

    Une image comme exemple avec une propagation maximal de 4. Les points jaune représente les positions ou la lumière est visible.


    Merci

  2. #2
    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!
    Au vu de ton image, il est évident que ton problème est mal formulé: par exemple, si tu fais 1 pas à gauche et 3 en bas, tu trouves un point jaune, alors que si tu fais 1 pas à droite,et 3 en haut, tu n'en trouves pas. Pourquoi?
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 197
    Points : 89
    Points
    89
    Par défaut
    bonjour FR119492,
    justement il n'y en a pas car le rayon et bloqué par le mur situé 1 pas en haut par rapport à la position de la lumière.
    Je rajoute l'image avec le tracé des rayons:


    Evidement je cherche un algo qui ne soit pas un tracé de rayon mais un parcourt de tableau afin d'optimiser mon code.

  4. #4
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Salut,
    Tu pourrais peut-être utiliser l'Algorithme de Bresenham pour avoir la liste des cases entre ta source et la case d'arrivée: si au moins l'une d'elle est un mur alors la lumière n'y parvient pas...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 197
    Points : 89
    Points
    89
    Par défaut
    Merci pour ta proposition
    J'avais vu cette algorithme en parcourent le web.
    Malheureusement cet une optimisation d'un lancer de rayon sur un tableau.
    Le problème c'est que plus le diamètre de la lumière est grand plus je doit tracer de rayon pour balayer toute une zone ce qui implique de revenir inutilement un très grand nombre de fois sur des cases déjà testé par les rayons précédent(ceux situé au plus près de la source lumineuse).

  6. #6
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par carton99 Voir le message
    Le problème c'est que plus le diamètre de la lumière est grand
    Est ce que cela veut dire que la source fait plus d'une case ?
    Bresenham est EXTREMEMENT rapide.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 197
    Points : 89
    Points
    89
    Par défaut
    Bonjour,
    il n'y a pas de doute sur la rapidité de l'algorithme de Bresenham.
    Le problème viens du fait que pour parcourir l'ensemble des cases alentour à la source lumineuse je suis obligé de réaliser un nombre de lancer de rayon dépendent du diamètre de la source lumineuse.
    Exemple si la source lumineuse a un rayon de 1 = 9 rayons (un pas de 45degrés.)
    Mais si le rayon et de 1000 ± 9000 rayons (un pas de ±0.1degrés) dans ce cas je repasse un très grand nombre de fois sur des cases déjà testé.

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par carton99 Voir le message
    Bonjour,
    il n'y a pas de doute sur la rapidité de l'algorithme de Bresenham.
    Le problème viens du fait que pour parcourir l'ensemble des cases alentour à la source lumineuse je suis obligé de réaliser un nombre de lancer de rayon dépendent du diamètre de la source lumineuse.
    Exemple si la source lumineuse a un rayon de 1 = 9 rayons (un pas de 45degrés.)
    Mais si le rayon et de 1000 ± 9000 rayons (un pas de ±0.1degrés) dans ce cas je repasse un très grand nombre de fois sur des cases déjà testé.
    ?

    Il faut faire cela dans l'autre sens:
    - tu prends la 1ere case du tableau (haut/gauche) et tu tires un rayon source->case. Ca te permet de déterminer la visibilité de TOUTES les cases traversées par le rayon.
    - tu prends la 2nde case du tableau. Si son état est déjà connu, tu passes à la 3ème. Si son état est inconnu, tu tires un rayon source->case et tu complètes la visibilité des cases du tableau.
    - etc.

    On peut grandement améliorer la performance en tirant seulement des rayons source-> coins des murs. Cela définit des secteurs angulaires contenant deux zones: devant / derrière le mur.

    Keywords: Ray casting, 2D, visibility
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 197
    Points : 89
    Points
    89
    Par défaut
    Salut,
    très bonne idée je vais essayer cela de suite.

  10. #10
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    ?

    Il faut faire cela dans l'autre sens:
    - tu prends la 1ere case du tableau (haut/gauche) et tu tires un rayon source->case. Ca te permet de déterminer la visibilité de TOUTES les cases traversées par le rayon.
    - tu prends la 2nde case du tableau. Si son état est déjà connu, tu passes à la 3ème. Si son état est inconnu, tu tires un rayon source->case et tu complètes la visibilité des cases du tableau.
    - etc.

    On peut grandement améliorer la performance en tirant seulement des rayons source-> coins des murs. Cela définit des secteurs angulaires contenant deux zones: devant / derrière le mur.

    Keywords: Ray casting, 2D, visibility
    en fait mon idée était juste de faire cela en parcourant les bords du tableau.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  11. #11
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    en fait mon idée était juste de faire cela en parcourant les bords du tableau.
    effectivement, il vaut mieux commencer par les bords pour maximiser la longueur du rayon et donc le nombre de cases traversées.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

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

Discussions similaires

  1. [Tableaux] Liste renseignée par un tableau
    Par teen6517 dans le forum Langage
    Réponses: 7
    Dernier message: 19/03/2007, 11h25
  2. Réponses: 20
    Dernier message: 05/07/2006, 20h03
  3. Réponses: 7
    Dernier message: 26/04/2006, 16h16
  4. [Tableaux] Remplacer les Frame par un tableau?
    Par Malau dans le forum Langage
    Réponses: 3
    Dernier message: 14/01/2006, 16h43
  5. Menu déroulant par dessus tableau
    Par M1000 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/12/2005, 15h14

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