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

 Delphi Discussion :

Faire pivoter dessin sur canvas


Sujet :

Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut Faire pivoter dessin sur canvas
    Bonjour

    Je m initie au canvas avec quelques difficultés...mathematiques car je souhaite faire pivoter un triangle sur son axe.
    je dessine le triangle comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
      Points: array of TPoint;
    begin
      SetLength(Points, 3);
      Points[0] := Point(105, 50);
      Points[1] := Point(190, 50);
      Points[2] := Point(150, 130);
      Canvas.Pen.Width := 2;
      Canvas.Pen.Color := clred;
      Canvas.Brush.Color := clgray;
      Canvas.Polygon(Points);
    J imagine que je dois, dans l ordre
    -creer les nouvelles coordonnées
    -effacer le triangle
    -dessiner le triangle aux nouvelles coordonnées.

    Mais je ne sais pas faire :
    -Pour effacer je pense redessiner par dessus avec la couleur de fond.
    -deplacer les coordonnées : là gros pb mathematique

    Merci de votre aide

    stephane

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    sp2308 : deplacer les coordonnées : là gros pb mathematique
    Pour déplacer les coordonnées des 3 sommets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure RotaPoint(Centre: tPoint; var Pt: tPoint; dPhiRad: Extended); // dPhiRad = Angle de rotation en Radians
    var Rxx, Ryy: Double; si, co: Extended;
    begin
      Rxx := Pt.x - Centre.x; Ryy := Pt.y - Centre.y;
      // Application de la matrice de rotation par rapport au centre xc,yc
      SinCos(dPhiRad, si, co);
      Pt.x := round(Centre.x + (Rxx * co - Ryy * si));
      Pt.y := round(Centre.y + (Rxx * si + Ryy * co));
    end;
    -Pour effacer je pense redessiner par dessus avec la couleur de fond.
    C'est faisable si le fond est uniforme.
    Par contre il est également possible de dessiner avec pen.mode:=pmXor ou pmNotXor et de redessiner par dessus avec le même mode ce qui efface les traits précédents avant de tracer le triangle dans sa nouvelle position.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Merci pour ta réponse mais je ne comprends pas un truc.
    C est une procedure. donc je ne comprends pas comment recuperer les valeurs nouvellement calculées car je ne vois pas comment elles peuvent affecter mon canvas autrement qu en les recuperant
    dsl
    stéphane

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-salut,

    C est une procedure. donc je ne comprends pas comment recuperer les valeurs nouvellement calculées
    Oui, c'est une procédure, mais dont le paramètre Pt: tPoint est une variable : procedure RotaPoint(Centre: tPoint; var Pt: tPoint; dPhiRad: Extended);
    et donc c'est ce point qui subira la rotation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var Points: array of TPoint;
      Centre: tPoint;
      dPhiRad: Extended;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    begin
     for i:=0 to high(Points) do begin
       ...
       RotaPoint(Centre, Points[i], dPhiRad);
       ...
    end;
    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    merci cette fois c est clair pour moi

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

Discussions similaires

  1. Redimensionner taille d'un TImage + dessin sur canvas
    Par Ben_Le_Cool dans le forum Langage
    Réponses: 2
    Dernier message: 21/07/2011, 16h39
  2. Problème de dessin sur Canvas
    Par ZouBi dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 18/06/2011, 11h28
  3. Réponses: 5
    Dernier message: 23/09/2006, 12h40
  4. Réponses: 1
    Dernier message: 05/08/2006, 20h43

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