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 :

Angle de réflexion


Sujet :

Algorithmes et structures de données

  1. #1
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut Angle de réflexion
    Bonjour

    Pour un projet sur la furtivité des avions, j'ai décidé (avec d'autres personnes) de faire un programme de simulation.
    Le but est d'avoir un trait (qui symbolise l'avion) qu'on peut faire pivoter à 360°. Par contre, on effectue la rotation toujours par rapport au même centre de la barre.
    Et on a d'autres traits (qui symbolisent les EOM) qui arrivent de l'autre côté de l'écran et qui viennent précuter le trait (l'avion). Et là, selon la position du trait (avion), on veut dévier les ondes.
    J'explique cela par un schéma :
    http://skynas.free.fr/images/simul.png

    Le trait blanc peut prendre plusieurs positions (j'en ai représenté que 4) et les ondes (en rouge et jaune) peuvent arriver de n'importe où (niveau hauteur de l'écran) du côté droit.
    Comme savoir comment les dévier exactement. C'set un programme qui doit être très réaliste.

    Précision : le programme est fait avec Allegro. La détection des collisions ne pose aucun problème. C'est juste savoir comment dévier une fois la collision détectée par rapport a la position du trait blanc et des ondes qui arrivent.
    J'espère avoir été clair. Merci

    Nas'

  2. #2
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    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 817
    Par défaut
    Salutn

    Ca ressemble plus à de la réflexion (miroir) qu'à de la réfraction (changement de milieu de propagation) ton truc.

    Dans le cas de la réflexion, l'angle des rayons incident et réfléchi par rapport à la normale à la surface est le même.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Oui c'est plutot réflexion en effet. Je corrige.

    En fait, mon problème se situe au niveau de la réflexion. Comment connaitre l'angle par rapport à la normale ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            /    
          /<-----------
        /
      /
    /
    Par exemple, sur l'exemple ci-dessus, le trait blanc fait un angle de 45° environ par rapport à l'horizontale (je dispose de cette donnée).
    Je sais que le rayon arrive depuis l'emplacement (800,50) (pour une résolutoin de 800*600). La coordonnée en y ne change pas. Par contre, celle en x diminue puisque le rayon se déplace vers la gauche.
    Dès que la collision est détectée, comment faire?
    Désolé, mon niveau en maths/physique n'est peut-être pas assez élevé, surtout que je déteste la géométrie et les trucs comme ça

    Je vais chercher dans les fonctions d'Allegro pour voir si y'a pas des fonctions qui peuvent me simplifier la tâche.
    Mais juste pour ma culture générale, j'aimerai bien savoir comment ça se résout mathématiquement sachant qu'on a juste l'angle d'inclinaison du trait blanc et les coordonnées du point de collision.

    Nas'

  4. #4
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    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 817
    Par défaut
    On va se baser sur l'axe Ox pour définir les angles (Ox = horizontal, orienté vers la droite).

    Ton avion fait un angle alpha avec Ox (on suppose 0<=alpha<=90 pour l'instant)
    Ton rayon OEM fait un angle de 0° (180° en fait... mais on prend 0)
    La normale a l'avion va faire un angle de -(90°-alpha)
    Le rayon OEM fait donc un angle de abs(90°-alpha) avec la normale
    Le rayon réfléchi fera donc un angle beta=-2*abs(90-alpha)

    Si alpha est négatif, il faut enlever 180° au résultat (en gros, tu corriges le résultat pour qu'il soit compris entre -180° et 180°)

    Connaissant ton point d'impact (x,y), tu peux tracer le rayon réfléchi entre ce point, et le point (x+100*cos(beta), y+100*sin(beta)) (tu changes le 100 si besoin est, c'est la longueur affichée du rayon réfléchi)

    En espérant ne pas m'être planté quelque part...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par Nasky
    Mais juste pour ma culture générale, j'aimerai bien savoir comment ça se résout mathématiquement sachant qu'on a juste l'angle d'inclinaison du trait blanc et les coordonnées du point de collision.
    Ca ne se résoud pas du tout avec aussi peu de données.

    Ca se calcule en prenant le vecteur symétrique par rapport à la normale du plan réfléchissant. C'est une base de reytracing, notamment, mais ça demande à bien connaître la géométrie, les maths et la physique. Ca porte même un nom : la Première Loi de Descartes.
    Petit lien : http://fr.wikipedia.org/wiki/Optique_géométrique#R.C3.A9flexion_et_miroirs
    Accessoirement, je te trouve très motivé pour vouloir faire ce genre d'application sans être calé en géométrie, mais bon...

    Ca requiert d'avoir 2 éléments :
    - Le vecteur "lumière", en coordonnées affines : c'est à dire que le vecteur possède non seulement une direction, mais également une origine. Dans ton cas, le point d'impact.
    - L'équation du plan réfléchissant. En général, c'est une "facette" triangulaire, déterminée par deux vecteurs affines de même origine et non-colinéaires.

    En gros, ça représente :
    - Coordonnée du point d'impact (3 paramètres),
    - Direction du vecteur incident ("vecteur lumière") (3 paramètres),
    - Coordoonnées du plan de réflexion (min. 4 paramètres, 6 le plus souvent).

    Le produit vectoriel de ces deux vecteurs de facette donne le vecteur normal de cette facette : attention, la facette est orientée, l'ordre des facteurs dans le produit vectoriel a une importance. En calculs de réflexion, toutefois, on peut s'en passer.

    Ensuite, on calcule le produit scalaire entre le vecteur incident et le vecteur normal : on en déduit le cosinus de l'angle, donc l'angle (0-Pi ou 0-180°) entre le vecteur normal et le vecteur incident (angle d'incidence).

    Il suffit alors de prendre l'angle opposé, et d'appliquer cet angle de "l'autre côté" du vecteur normal pour obtenir le rayon réfléchi.
    En général, on se place dans un repère orthonormé basé sur la facette et son vecteur normal, car cela simplifie beaucoup les calculs. Une fois le rayon réfléchi calculé, on repasse dans le repère général pour obtenir les coordonnées finales du rayon réfléchi.

    Ce type de calcul est massivement utilisé en 3D, pour déterminer l'éclairage des polygones.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  6. #6
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    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 817
    Par défaut
    Citation Envoyé par Mac LAK
    Ca ne se résoud pas du tout avec aussi peu de données.
    Vu le "peu de données", j'avais personnellement supposé que Nasky se limitait à de la 2D, auquel cas ça se résoud avec les données qu'il a fourni (position du miroir, position et direction de la source).

    Si on passe à la 3D, alors oui, on passe à ce que tu dis Mac LAK !
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  7. #7
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Merci à vous.
    En fait je suis juste en 2D. Donc si je peux faire comme tu dis c'est plus simple parce que j'avoue que je n'ai pas tout capté de ce que Mac Lak m'a dit
    je connaissais la première loi de Descartes (vive les souvenirs de collège) mais bon, j'arrive pas trop à l'appliquer ici.
    je vais essayer et faire de mon mieux et je vous tiens au courant si j'obtiens quelque chose.
    Merci encore.

    Nas'

    PS : demain je vois un prof de maths à qui je montrerai la méthode de Mac Lak, je verrai ce qu'il en pense.

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par Nasky
    En fait je suis juste en 2D.
    Ca réduit le nombre de paramètres, mais pas le nombre d'éléments requis. La Première Loi de Descartes s'applique aussi, de toutes façons.

    On arrive donc à :
    - Le vecteur incident (affine),
    - L'équation de la droite de réflexion.

    Donc :
    - Coordonnée du point d'impact (2 paramètres),
    - Direction du vecteur incident (2 paramètres),
    - Coordoonnées de la droite de réflexion (min. 3 paramètres, 4 le plus souvent).

    Le vecteur normal à la droite de réflexion s'obtient aisément si l'on a le vecteur directeur : si ton VD a comme coordonnées (A,B), le vecteur normal est (-B,A) (c'est une application directe du produit scalaire).

    Pour le reste, ça ne change pas trop, hormis que le calcul n'a plus que deux dimensions, et qu'il n'est donc pas nécessaire de s'assurer que les vecteurs incident, normal et réfléchi soient coplanaires.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  9. #9
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    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 817
    Par défaut
    Citation Envoyé par plegat
    Si alpha est négatif, il faut enlever 180° au résultat (en gros, tu corriges le résultat pour qu'il soit compris entre -180° et 180°)
    Je viens de tester mes dires... et je retire cette petite remarque. Il ne faut pas enlever 180°, mais en rajouter 360. Ca ne change rien au résultat, mais ça permet de garder les angles entre -180° et 180°
    Ca marche très bien dans ton cas de figure relativement simple Nasky.

    Et il n'y a pas besoin de valeur absolue pour le calcul de l'angle du rayon réfléchi:
    Citation Envoyé par plegat
    Modif: Le rayon réfléchi fera donc un angle beta=-2*(90-alpha)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

Discussions similaires

  1. Comment faire une rotation de metafile (l'angle de 90° me suffit) ?
    Par Tardiff Jean-François dans le forum Langage
    Réponses: 4
    Dernier message: 28/01/2005, 08h58
  2. [Java 5] Réflexion sur les énumérations type-safe
    Par rozwel dans le forum Langage
    Réponses: 5
    Dernier message: 04/12/2004, 20h34
  3. Conversion distance , angle vers coordonnées de points
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 26/03/2004, 22h55
  4. calculer un angle
    Par m.nico dans le forum Langage
    Réponses: 7
    Dernier message: 05/11/2003, 20h55
  5. angle entre 2 segments
    Par tane dans le forum Mathématiques
    Réponses: 4
    Dernier message: 25/09/2002, 16h47

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