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

2D Java Discussion :

[Java2D] Matrice de transformation


Sujet :

2D Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 17
    Par défaut [Java2D] Matrice de transformation
    Bonjour,

    J'essais de donner de la perspective à une image à l'aide d'un objet AffineTransform, mais je ne parviens pas a obtenir l'effet voulu.

    Mon but est d'arriver à celà :


    Un des constructeur de AffineTransform permet de passer une matrice 3*3 en paramètre. Je peut faire des rotations, et torsions, mais je ne suis pas sur de pouvoir faire ce que je veut de cette manière.

    Est ce que quelqu'un peut me dire si je suis sur la bonne voie ou si il faut que ej change de chemin ?

    Merci

  2. #2
    Membre éclairé
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Par défaut
    Oui tu es dans la bonne direction!

    Par contre, bien qu'utilisant régulièrement J2D et les AffinesTranforms, je n'ai jamais eu à faire ce que tu décris.

    A partir des transformations classiques je ne sais pas trop si tu peux y arriver (en théorie oui, mais comment?).

    Par contre en utilisant directement une matrice de tranformation ça ne doit pas être trop compliqué.

    Partant du principe que
    est l'identité


    la matrice suivante devrait te donner quelque chose d'approchant à ton schéma:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    2    0   -150
    0,5 1,5 -100
    0    0    0,5
    J'avoue que je n'ai pas fait de tests et que je n'ai pas fait les calculs non plus.
    Je me suis juste servi des infos que Gimp te donne sur la matrice de transformation lorsque l'on fait une transformation de perspective.
    Je pars du principe que les système de coordonnés de J2D et de Gimp sont compatibles.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 17
    Par défaut
    Merci pour ta réponse.
    Je ne savais pas qu'il était possib le de récupérer des matrices depuis the Gimp, il serais temps que je l'installe

    En revanche, j'ai fait une erreur en disant qu'on pouvais passer en paramètre d'un affineTransform une matrice 3*3... a priori on ne peut renseigner que 6 valeurs, la dernière ligne est ignorée...

    De plus, je suis tombé sur une démo Java2D de sun (http://java.sun.com/products/java-me...Java2Demo.html) et on ne vois pas de transformation d'image très complexe. Leur démo n'est peut être pas exaustive, mais j'imagine que si ce type de transformation était possible, elle aurait été représentée par un exemple...

    Je vais essayer de voir du côté des API externes. Je pense qu'il faudra de toute facon apsser par une matrice, je garde précieusement ta proposition.

    Merci encore, je posterais ma potentiel solution ici.

  4. #4
    Membre éclairé Avatar de puybaret
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 61
    Par défaut
    Tu n'es pas obligé de donner directement les valeurs de la matrice. Utilise plutôt les méthodes de AffineTransform, c'est plus simple et ça donne un code plus clair.
    Je crois que la transformation que tu veux obtenir s'effectue avec la méthode shear ou setToShear.
    [Message édité : Après un essai, shear ne déforme pas le dessin avec l'effet que recherche Talstus]

  5. #5
    Membre éclairé
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Par défaut
    un lien pour plus d'info:
    http://www.unix.org.ua/orelly/java-ent/jfc/ch04_11.htm

    Essaye quand même la matrice:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    2    0   -150
    0,5 1,5 -100
    étant donné que tu fais de la 2D je pense que ça devrait être bon.

  6. #6
    Membre éclairé
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Par défaut
    Il y a quand même un truc qui me chiffone:

    Citation Envoyé par JFC in a Nutshell
    The coordinate system transformations described by AffineTransform have two very important properties:
    -Straight lines remain straight
    -Parallel lines remain parallel

  7. #7
    Membre éclairé
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Par défaut
    ça se confirme. Si les trois coefficients du bas de la matrice 3x3 sont figés à
    0,0,1 il suffit de trois couples départ/arrivé pour définir les 6 autres coefficients.
    Et lorsque tu prend un quatrième couple départ/arrivé, il vérifie bien les conditions d'alignement et de parallèlisme.

    Donc pas de solution simple et prète à l'emploi!

  8. #8
    Membre éclairé
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Par défaut
    Ce que je te conseille c'est d'étendre AffinesTransform par une classe gérant les transformations "quelconques" y compris non affines ne conservant pas le parallelisme.
    Elles prendraient en entrée des matrices 3x3 plutôt que 3x2.
    J'ai jeté un coup d'oeil au code de l'API, ce n'est pas insurmontable à partir du moment où l'on ne tente pas d'optimisation et on l'on traite tout les cas par le calcul de matrice.
    Bien sur il vaut mieux "oublier" l'inversibilité des matrices car là c'est une autre paire de manches.

  9. #9
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Par défaut
    Bonjour,
    dans JAI, tu as la classe PerspectiveTransform qui te permet de faire cela automatiquement.
    En Java2D, tu ne peux pas le faire.
    A+
    H.

  10. #10
    Membre éclairé
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Par défaut
    Citation Envoyé par hedes
    dans JAI, tu as la classe PerspectiveTransform qui te permet de faire cela automatiquement.
    H.
    Tu aurai un doc sympa de JAI a me conseiller?
    Enfin autre chose que les specs sun. J'ai cherché chez O'Reilly et je n'ai rien vu!

  11. #11
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    En Java2D tu ne pourras pas faire ça sur une image. Enfin si... mais la transformation est linéaire et ça correspondra à un bête "clip" de l'image.

    hedes a raison, il faut passer par JAI. Ou par une API 3D carrément

  12. #12
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Par défaut
    Un bon bouquin sur JAI :
    "Building Imaging Applications with Java Technology" de Lawrence H. Rodrigues
    Edition Addison Wesley.
    A+
    H.

  13. #13
    Membre éclairé
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Par défaut
    C'est noté! merci!

    ps: mais que fait O'Reilly?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 17
    Par défaut
    eh ben ! merci pour toutes ces réponses ! je vais me tourner vers JAI, je suis quand même un peut décu de voir que java ne permet pas de faire ca facilemenent sans API externe... il m'avait habitué a me simplifier la vie jusque là :-D

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

Discussions similaires

  1. Matrice de transformation 3D
    Par acacia dans le forum Développement 2D, 3D et Jeux
    Réponses: 10
    Dernier message: 08/09/2007, 08h17
  2. Réponses: 4
    Dernier message: 08/03/2007, 10h32
  3. Ajouter une matrice de transformation
    Par Ekinoks dans le forum OpenGL
    Réponses: 9
    Dernier message: 20/11/2006, 19h32
  4. Envoyer la matrice de transformation
    Par Ekinoks dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/11/2006, 10h10
  5. Moteur 2D: Pb de calcul de Matrice de transformation
    Par themadmax dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 29/06/2006, 11h22

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