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

Composants VCL Delphi Discussion :

Un bitmap ou canvas qui travaille directement en coordonnées mathématiques


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut Un bitmap ou canvas qui travaille directement en coordonnées mathématiques
    Un truc sympa est de réaliser un composant qui dérive d'un bitmap et qui permet de raisonner directement en coordonnées mathématiques plutôt qu'en coordonnées informatiques.

    Par exemple, Monbitmap:=Tmonbitmap.create(monwidth,monheight,-10,10,-15,15)

    ainsi, c'est comme si je réalisais un repérage mathématique en extended
    avec minx,maxx,miny et maxy.

    dans mon exemple, on va de -10 à +10 en abscisse et j'ai redéfini toutes les méthodes de dessin de mon composant...
    exemple un line(rpoint1,rpoint2) pour tracer une ligne ou rpoint est un record
    type Trpoint
    x,y:extended;
    end;

    comme ça, c'est nickel, il suffit de faire son dessin sur une feuille quadrillée en
    coords mathématiques et de pondre une application graphique en 3 coups de click.
    Puis pour se faire des graphiques, c'est parfait.
    Avec ça, on raisonne directement en coordonnées réelles.

    @+

  2. #2
    Membre émérite
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    Tu as trouvé une méthode pour le faire simplement, Archimède ? Faudrait que tu nous donnes ton code...

  3. #3
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    cadeau... si tu veux un exemple, tu me le dis...

  4. #4
    Membre émérite
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    Hmm.. tu redéfinis toutes les fonctions dont tu as besoin. C'est loin d'être "simple".

  5. #5
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    oui, c'est vrai. J'ai pris une ugraphique comme ça...
    J'en ai fait d'autres suivant les besoins.
    Là, c'est encore en construction puisqu'il faut la compléter.
    Sinon, l'utilisation en est très simple...
    Ce qu'il faut comprendre, c'est déjà la fonction transfo et ce que j'ai mis dans le constructor create.
    Tu te fais un petit schéma... essaie de voir comment passer des coords mathématiques aux coordonnées informatique et tu pigeras mes formules :

    Gx:=width/(xmax-xmin);
    Gy:=height/(ymax-ymin);
    O:=pt(-xmin*Gx,ymax*Gy);

    result:=point(round(O.x+x*Gx),round(O.y-y*Gy));

    après, je pense, tu sauras faire...

    @+

  6. #6
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    Citation Envoyé par Archimède Voir le message
    oui, c'est vrai. J'ai pris une ugraphique comme ça...
    J'en ai fait d'autres suivant les besoins.
    Là, c'est encore en construction puisqu'il faut la compléter.
    Sinon, l'utilisation en est très simple...
    Ce qu'il faut comprendre, c'est déjà la fonction transfo et ce que j'ai mis dans le constructor create.
    Tu te fais un petit schéma... essaie de voir comment passer des coords mathématiques aux coordonnées informatique et tu pigeras mes formules :

    Gx:=width/(xmax-xmin);
    Gy:=height/(ymax-ymin);
    O:=pt(-xmin*Gx,ymax*Gy);

    result:=point(round(O.x+x*Gx),round(O.y-y*Gy));

    après, je pense, tu sauras faire...

    @+
    Vous connaissez SetWindowOrgEx ? C'est une fonction du GDI qui permet de déplacer l'origine du repère. Après on peut continuer à dessiner avec les fonctions standards, il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      SetWindowOrgEx(Canvas.Handle, -Width div 2 , -height div 2, nil);
      Canvas.MoveTo(0, 0);
      Canvas.LineTo(Width div 2, 0);
      Canvas.MoveTo(0, 0);
      Canvas.LineTo(0, height div 2);
    Et on dessine les axes du repère, avec le 0 centré au milieu de la zone.

    A partir de NT4, on peut utiliser SetWorldTransform pour définir une transformation linéaire à appliquer au repère.
    Ainsi avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    var
      xFrm : XFORM;
    begin
      xFrm.eM11 := 1;
      xFrm.eM12 := 0;
      xFrm.eM21 := 0;
      xFrm.eM22 := -1; // Retourne l'axe des y
      xFrm.eDx := width div 2; // changement d'origine X
      xFrm.eDy := height div 2; // changement d'origine Y
      SetGraphicsMode(Canvas.Handle, GM_ADVANCED);
      SetWorldTransform(Canvas.Handle, xFrm);
     
      Canvas.MoveTo(0, 0);
      Canvas.LineTo(Width div 2, 0);
      Canvas.MoveTo(0, 0);
      Canvas.LineTo(0, height div 2);
    On déplace à la fois le centre du repère, et on retourne l'axe des Y. C'est directement le GDI qui calculera toutes les transformations nécessaires : On applique une matrice de transformation aux coordonnées indiquées à chaque fonction de dessin.
    Ainsi, avec une seule fonction on peut réaliser la plupart des transformations : Symétrie, rotation, homotéthie, changement d'origine...

Discussions similaires

  1. Travailler sur les Bitmap, ou sur les loaders directement
    Par minimolo dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 14/12/2008, 12h08
  2. Programme qui travaille mais ne se termine jamais
    Par nialcen dans le forum Prolog
    Réponses: 3
    Dernier message: 20/11/2008, 08h41
  3. [PHP-JS] Script qui travaille dans le vide
    Par bsc-concept dans le forum Langage
    Réponses: 5
    Dernier message: 30/01/2007, 15h04
  4. pc qui "travaille", pourquoi ?
    Par lavazavio dans le forum Windows XP
    Réponses: 11
    Dernier message: 10/01/2007, 23h20
  5. Réponses: 4
    Dernier message: 07/10/2005, 18h34

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