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

Physique Discussion :

Réflexion d'un rayon contre un arc de cercle


Sujet :

Physique

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 112
    Points : 45
    Points
    45
    Par défaut Réflexion d'un rayon contre un arc de cercle
    Bonjour,

    J'essaye de faire un moteur de lumière 2D le plus réaliste possible avec reflexion des rayons...
    J'aimerais savoir comment trouver le rayon réfléchi d'un rayon (dans le sens d'un angle de lumière, pas un trait) qui se réfléchit contre l'extérieur d'un cercle ou arc de cercle.
    J'ai l'impression que le centre du rayon réfléchi sera toujours au même endroit pour un même centre du rayon d'origine mais je n'arrive pas à le prouver.
    J'epère être assez clair.

    Merci

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Salut

    Citation Envoyé par bourriquet_42 Voir le message
    J'ai l'impression que le centre du rayon réfléchi sera toujours au même endroit pour un même centre du rayon d'origine mais je n'arrive pas à le prouver.
    J'epère être assez clair.
    en parlant de "centre" de rayon réfléchi, non, pas vraiment!

    Tu dois avoir le même angle entre le rayon réfléchi et la normale à ton cercle, et entre le rayon incident et la normale. La normale étant le rayon (au sens géométrique, pas lumière) du cercle, c'est assez simple à déterminer.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 112
    Points : 45
    Points
    45
    Par défaut
    C'est bien ce que je craignais, je suis pas clair.
    Si on parle de rayon dans le sens d'un trait de lumière, ce que je me demande c'est si ces rayons réfléchis d'un ensemble de rayons de même centre (source, origine) ne se croisent pas tous au meme endroit.
    Je représente les "rayons" de lumière (ensemble de rayons partant du même centre, y a pas un autre mot?) par des triangles avec comme extrémités le centre et les extrémités du rayon, et je me demande si c'est possible de représenter les rayons réfléchis sur un cercle de la même facon.
    Pour résumer, je sais trouver le réfléchi d'un rayon mais pas d'un ensemble de rayons de même centre.

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par bourriquet_42 Voir le message
    J'aimerais savoir comment trouver le rayon réfléchi d'un rayon (dans le sens d'un angle de lumière, pas un trait) qui se réfléchit contre l'extérieur d'un cercle ou arc de cercle.
    J'ai l'impression que le centre du rayon réfléchi sera toujours au même endroit pour un même centre du rayon d'origine mais je n'arrive pas à le prouver.
    J'epère être assez clair.
    Merci
    Eh bien c'est pas compliqué d'abord il faut que tu connaisses l'équation d'un cercle ce qui te permettra de parcourir tous les points ;
    une fois que tu as ces points, il faut calculer l'angle d'incidence résultant ou bien normaliser le vecteur du rayon de lumière.
    L'équation d'un cercle c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    double x1;
    double y1;
    double xCentreCercle;
    double yCentreCercle;
    double diametre;
    for( angle =0;angle,360;angle++)
    {
    x1=xCentreCercle+( diametre*cos (angle));
    y1=xCentreCercle+( diametre *sin (angle));
     
    }
    Il faut faire une conversion degrés->radians car en C/C++ cos et sin calculent en radians
    Ensuite quand tu as x1 et y1 tu peux tester si les points de ton vecteur sont proches de chaque x1 et y1.
    Il y a des optimisations à faire car cela risque de demander bcp de calculs.
    Tu ferais mieux de poser cette question dans le forum algorithmes il y a plus de cracks en maths que moi

  5. #5
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Points : 422
    Points
    422
    Par défaut
    les points du rayon lumineux partant d'un point L (lumière) et allant dans la direction dirL sont les points L + k.dirL
    l'intersection avec le cercle se fera au point I tel que
    I = L + k.dirL et | I - C |² = r² où C est le centre du cercle et r le rayon du cercle, c'est une bête équation du second degré d'inconnue k qui peut avoir 0, 1 ou 2 solutions

    une fois que tu as I tu as la normale au cercle en I : N = (I - C).normalized()
    et peux faire newDirL = reflect(dirL,N) pour obtenir un nouveau rayon lumineux partant de I et de direction newDirL :

    // reflect a sur b (b normalisé)
    vecteur reflect(vecteur a, vecteur b)
    {
    vecteur composante_normale = a.dot(b) * b;
    vecteur composante_tangeantielle = a - composante_normale;
    return compsante_tangeantielle - composante_normale;
    }

  6. #6
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Citation Envoyé par bourriquet_42 Voir le message
    Je représente les "rayons" de lumière (ensemble de rayons partant du même centre, y a pas un autre mot?) par des triangles avec comme extrémités le centre et les extrémités du rayon, et je me demande si c'est possible de représenter les rayons réfléchis sur un cercle de la même facon.
    Pour résumer, je sais trouver le réfléchi d'un rayon mais pas d'un ensemble de rayons de même centre.
    Dans ce cas, tu détermines les rayons réflechis des deux rayons extrêmes de ton "triangle" de lumière incidente. Ils vont s'intersecter en un point qui sera le centre du "rayon" réfléchi.
    En cas de réflection partielle du rayon incident (genre une partie de ton cone incident n'atteint pas le cercle), divise le cone incident au niveau de la ligne de tangence.

    Attention, c'est valable pour déterminer la zone lumineuse couverte par les rayons réfléchis, par contre la distribution d'énergie n'est pas forcément homogène... voir avec les formules données précédemment pour calculer la distribution énergétique du rayon réfléchi.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 112
    Points : 45
    Points
    45
    Par défaut
    OK c'est bien ce que je pensais pour la distribution.
    Je pensais représenter la distribution en modulant avec des textures mais je suppose que là ça ne va pas être possible...
    Je savais pour cette méthode pour trouver le centre mais je pensais qu'il y aurait des règles pour trouver encore plus facilement (optimisation pas flemme bien sûr...)
    Je laisse un peu le sujet ouvert si qqun a une idée pour représenter la distribution d'énergie sans faire de point par point...
    Merci en tout cas

Discussions similaires

  1. Tracer des lignes ,arcs de cercle et cercle
    Par lostchina dans le forum C++Builder
    Réponses: 16
    Dernier message: 12/06/2007, 06h59
  2. Dessiner un arc de cercle autour d'une picturebox
    Par WindowsVista dans le forum VB.NET
    Réponses: 2
    Dernier message: 11/06/2007, 11h48
  3. Arc de cercle sous VBA excel?
    Par fredieuric dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/11/2006, 13h58
  4. tracer arc de cercle
    Par scalaire00 dans le forum Débuter
    Réponses: 2
    Dernier message: 30/04/2006, 20h27
  5. [VB6] [Graphisme] Arc de cercle dans un picturebox
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 04/11/2002, 17h55

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