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

Java Discussion :

Algorithme de déformation


Sujet :

Java

  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut Algorithme de déformation
    Bonjour,

    Ma question ne concerne pas que Java, mais comme j'ai l'habitude de venir sur ce forum, je poste d'abord ma question ici.

    Voilà, j'aimerai savoir si quelqu'un peut me trouver l'algo utilisé par Word lors de la déformation de certaines formes.

    J'explique le cas qui m'intéresse :
    - tracer 2 formes (un rectangle et une ellipse par exemple)
    - appliquer une rotation d'un angle quelconque (mais pas 90°) au rectangle
    - grouper les 2 formes
    - cliquer sur la poignée de déformation du coin supérieur gauche du groupe et la déplacer comme bon vous semble.

    Le résultat est qu'on obtient une déformation bien particulière du rectangle : en effet ce dernier reste un rectangle (il ne se transforme pas en parallélogramme) et se déplace légérement.
    On dirait que le rapport entre la largeur/longueur du rectangle et celle du groupe reste constante.

    Je n'arrive pas à comprendre comment ils font pour faire ça (quelle transformation est appliquée au rectangle).

    Si quelqu'un pouvait m'éclairer, ce serait vraiment sympa.
    Merci d'avance!

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 864
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 864
    Points : 3 438
    Points
    3 438
    Par défaut
    Salut,

    Quand tu groupes des objets, les déformations que tu appliques au groupe se font sur l'ensemble.

    Je pense que c'est du vectoriel, quand tu groupes des objets, un nouveau "plan" est crée, ou les objets groupés sont placés avec des coordonnées, et après les transformations que tu appliques s'appliquent au plan, qui répercute celles-ce sur les coordonnées des objets groupés.

  3. #3
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Je sais pas si j'ai bien compris ce que tu dis, mais si tu parles d'appliquer les déformations du groupe à chaque forme le composant, ça ne marche pas...
    Parce que le rectangle se transforme en parallélogramme.

    Si c'est pas ça que tu voulais dire, désolé j'ai pas compris
    Tu peux me réexpliquer avec des mots tout simples?

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 864
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 864
    Points : 3 438
    Points
    3 438
    Par défaut
    Je viens de vérifier sous Word : en fait, quand tu sélectionnes un coin d'un groupe, et que tu déformes, il ne s'agit pas d'une déformation mais d'un redimensionnement, donc les angles sont conservés !

  5. #5
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ouais ok, mais comment qui font les monsieurs de Word???
    Parce que j'aimerai coder le même fonctionnement et je comprends pas ce qu'ils font...

  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 864
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 864
    Points : 3 438
    Points
    3 438
    Par défaut
    Et bien c'est un truc de matheux ( ce que je ne suis pas ), mais selon ce que j'imagine, quand tu redimensionnes un objet, les points placés dans cet objet à coordonnées fixes sont aussi déplacés proportionnellement et "dans la même direction" que l'ensemble.

    J'arrive à visualiser le système, il se base sur l'angle de rotation pour connaitre les déplacements en X et en Y des coordonnées des points.

  7. #7
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    En fait, je crois que j'ai trouvé...
    Bon après pour l'expliquer avec des mots, c'est un autre problème...
    Mais bon, au cas où ça intéresserait du monde, voilà ce que j'ai cru comprendre.
    - on applique à chaque forme composant le groupe, une dilatation en X égale au rapport entre la largeur finale du groupe et sa largeur initiale.
    - idem pour les Y avec la hauteur.

    - une fois que ceci est fait, on a les bonnes proportions pour les formes, mais elles ne sont pas placées au bon endroit. Donc on va appliquer une translation à chaque forme :
    - en X, on aura une translation du centre de chaque forme de (largeur finale groupe - largeur initiale groupe)/coefficient de dilatation en X du groupe.
    - idem en Y avec la hauteur.

    Et je crois qu'avec ça, on devrait obtenir le même résultat, mais ça reste à vérifier...

    Merci pour tout! Et au bucher les matheux!!!

  8. #8
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 864
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 864
    Points : 3 438
    Points
    3 438
    Par défaut
    Cependant je ne vois pas pourquoi tu devrais appliquer une translation à chaque objet, sachant que vu qu'ils sont groupés, ils peuvent tous subir les mêmes transformations, notamment les "dilatations" dont tu parles

    Le groupe se comporte comme une grillage, contenant l'ensemble des coordonnées utiles aux objets qui le composent, et donc une transformation sur ce "grillage", applique la transformation aux objets composites

  9. #9
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ben je sais pas, mais imagine que tu fasse une déformation vers le haut et la gauche du coin supérieur gauche de ton groupe.
    Qu'est ce que tu appliquerais comme transformation à chaque forme? Et à quels points de la forme tu les appliquerais?

  10. #10
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 864
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 864
    Points : 3 438
    Points
    3 438
    Par défaut
    Je pense que quand tu groupes un objet, admettons un rectangle, il change de "description".
    Ce n'est plus sa propre orientation qui compte, mais son placement par rapport au groupe. Donc quand tu appliques une déformation ce ne sont que les coordonnées relatives à l'objet par rapport au groupe qui sont également "déformées" et non celles qui définissaient l'objet quand il n'appartenait pas au groupe.

    Je ne suis pas un expert du vectoriel je tiens à le préciser !
    Mais j'ai travaillé sur quelques algo de ce style, pour le fun, sans aller trop loin... et donc j'ai une "idée" de la chose, peut-être erronnée et simpliste!

  11. #11
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 869
    Points : 22 932
    Points
    22 932
    Billets dans le blog
    53
    Par défaut
    Hello,
    concernant Java, la classe java.awt.geom.AffineTransform est la pour repondre a ce genre de besoins. Donc penser a lire la documentation de cette classe pour comprendre comment une transformation affine peut changer les coordonnees d'un point (basiquement c'est un produit entre un vecteur vertical et une matrices) dans un context plus global. Voir aussi Java 2D Graphics chez O'Reilly, ISBN 1-56592-484-3, ou ce genre de choses est explique.

    Et au besoin tester dans le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    graphics.setTransform(maTransformation);
    .... // Desiner ici.
    graphics.setTransform(maTransformation.createIverse());
    Sinon les primitves de rendu 2D comme scale(), rotate(), shear(), ... font la meme chose.

    Note: shear() ne conserve pas les angles (mais conserve la droiture et le parallelisme).

    Mais :
    - rotate = conservation des angles.
    - scale X et/ou Y = conservation des angles droits entre lignes horizontales et verticales.
    Donc rotation+scale ca conserve les angles droits entre les lignes // aux sens du scale non ????? Rectangle au debut => rectangle d'aspect-ratio et d'orientation differente a la fin (conservation des angles droits).
    Jusque-la ca va...

    Apres il semble bien que Word fasse des grosses simplifications (en plus du "coller a la grille", ...) : il semble que Word a une regle codee "en dur" qui fait qu'un rectangle reste de toute maniere toutjours un objet rectangle.

    Dessiner un rectangle, le faire pivoter de 30 deg. Dessiner un autre rectangle qui chevauche/cache le coin inferieur du 1er. Grouper (deja la boite englobante n'englobe pas les 2 rectangles...).
    Puis:
    - faire un retressissement sur l'axe Y : au bout d'un moment le coin inferieur du 1er rectangle va commencer a apparaitre audessous du 2nd rectangle...
    - faire un agrandissement sur l'axe Y : au bout d'un moment le coin inferieur du 1er rectangle va commencer a apparaitre audessus du 2nd rectangle.

    Moi je dis Word deconne...

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

Discussions similaires

  1. Algorithme déformation d'image
    Par ArkAng3 dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 16/10/2010, 17h30
  2. Algorithme de randomisation ... ( Hasard ...? )
    Par Anonymous dans le forum Assembleur
    Réponses: 8
    Dernier message: 06/09/2002, 15h25
  3. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 23h18
  4. Recherche de documentation complète en algorithmes
    Par Anonymous dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 29/03/2002, 13h09
  5. Algorithme génétique
    Par Stephane.P_(dis Postef) dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 15/03/2002, 18h14

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