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

Lazarus Pascal Discussion :

Rotation excentrée : comment faire ? (simulation d'un GPS) [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Novembre 2015
    Messages : 23
    Par défaut Rotation excentrée : comment faire ? (simulation d'un GPS)
    Je cherche à modifier la simulation d'un GPS aéronautique :
    Actuellement la carte se déplace (dans les plans verticaux et horizontaux) et l'avion tourne selon le cap à suivre.
    Tout fonctionne parfaitement.

    J'aimerais le faire évoluer afin que cela soit plus réaliste afin d'obtenir ceci :

    Nom : Rotation Carte1.png
Affichages : 310
Taille : 59,1 KoNom : Rotation Carte.png
Affichages : 293
Taille : 160,9 Ko

    L'avion reste vertical au centre de l'écran, la carte se déplace et tourne selon le cap à suivre.

    Le problème que je n'arrive pas à résoudre est le suivant : sauf erreur de ma part, le centre de rotation est excentré, il se trouve à l'emplacement de l'avion.
    Comment faire cette rotation ?
    J'ai regardé les documents de Gilles Vasseur (merci à lui) et m'en suis inspiré. Suis-je passé à côté d'une explication ?
    J'ai joint le code source qui permet de simuler les déplacements de l'avion selon un plan de vol.
    Il reste à programmer le dernier trackbar (Angle de la partie MAP).
    Peut-être cela se résume-t-il à une ligne ou quelques lignes de code qui m' échappent.
    Si tel est le cas je suis preneur sinon tant pis je ferai avec l'existant. (Si vous avez besoin d'informations supplémentaires, n'hésitez pas à demander)

    Le programme d'essai :

    Nom : simulateur.PNG
Affichages : 294
Taille : 289,2 Ko
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 940
    Billets dans le blog
    6
    Par défaut
    Bonsoir,
    La fonction TBGRABitmap.FilterRotate doit répondre à ton besoin.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Novembre 2015
    Messages : 23
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Bonsoir,
    La fonction TBGRABitmap.FilterRotate doit répondre à ton besoin.
    Effectivement après quelques essais cela semblerait être le cas, du moins c'est la piste à suivre.
    Ne maitrisant pas encore bien cette fonction, je n'obtiens pas exactement ce que je veux, il faut que j'affine les calculs.

    Cela va me prendre un peu de temps (peu de disponibilités en ce moment).
    Quand j'aurai terminé, je reviendrai poster pour indiquer que c'est résolu et posterai les nouvelles sources afin qu'elles servent d'exemple.

    Merci.

  4. #4
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 659
    Par défaut Ca tourne carré
    Bonjour,

    Une rotation autour d'un point (xc, yc) est toujours de la forme :
    xr = xc + (x-xc)*cos(a) - (y-yc)*sin(a)
    yr = yc + (x-xc)*sin(a) + (y-yc)*cos(a)

    Mais, pour éviter des trous, on cherche en général l'inverse, c'est à dire trouver pour chaque point de destination (xr, yr) quel est le point (x, y) d'origine.

    Cela peut se faire en ne calculant qu'une fois les points correspondants aux 4 angles et en appliquant une transformation entière (double Bresenham) aux deux triangles qui composent le rectangle. C'est rapide. Mais le plus simple reste bien sûr d'utiliser une bibliothèque.

    Il faut prévoir une image source plus grande que l'image cible qui contienne au moins les 4 points correspondants aux angles de l'image cible.

    Salutations

  5. #5
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut tu peux jeter un oeil a cette discussion aussi https://www.developpez.net/forums/d1.../#post11003920
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 174
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Voici la solution que je proposerais.

    Attention ! Je n'ai pas inclus l'image korea.jpg. Il faut la copier à partir de la pièce jointe du premier message.

    À la place des trackbars, j'ai utilisé un timer. La vitesse de l'avion est constante. On modifie le cap de l'avion au moyen des flèches gauche et droite du clavier.

    L'avion est dessiné toujours au même endroit. Sa position est recalculée à la fin de chaque intervalle de temps. En fonction de sa position et de son cap, on redessine la carte.

    En espérant que cet exemple fasse avancer la discussion.

    P.-S. En jouant avec la version originale de l'exemple, j'avais fait une première correction pour que l'avion tourne sur son centre (qui ne correspond pas au centre de l'image), et j'avais agrandi le composant pour que l'ombre ne soit pas coupée. Dans cette nouvelle version, ça ne se justifie plus d'agrandir le composant, mais je n'ai pas pensé à annuler cette modification.

    Au fait, normalement, l'ombre devrait tourner aussi. Donc il faudrait l'avoir sur une image séparée.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Internet Explorer sur PDA avec GPS : comment faire un lien vers le GPS
    Par sjachym dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 21/06/2008, 00h45
  2. [Rotations] Un objet sur une planete, comment faire ?
    Par supergrey dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 09/03/2008, 11h21
  3. Les rotations, je ne saisi pas comment faire
    Par tyrant dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 12/11/2006, 20h39
  4. Réponses: 22
    Dernier message: 31/05/2006, 20h11
  5. 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

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