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 :

Calcul de positions de JInternalFrame après zoom in/out


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 78
    Par défaut Calcul de positions de JInternalFrame après zoom in/out
    Bonjour,

    J'ai un JDesktopPane qui contient des JInternalFrame que j'ai customisé puisqu'elle n'elles ne contiennent qu'une image (affiché dans un paint redéfini) chacune et que j'ai enlevé l'UI (barre de titre, border ...).
    Cela me sert à gérer une scène de vie comme le montre l'image "auberge_1.jpg".

    J'ai commencé à implémenter un outil de zoom qui permet de zoomer/dézoomer l'affichage du JDesktopPane. Pour cela l'outil demande à chaque fenetre de recalculer son image en fonction de l'échelle (ce qui marche très bien).
    On voit ainsi dans l'image "auberge_2.jpg" que les objets sont plus petits après un zoom de -0.2 (80%) et que leur position relative entre eux reste correcte.
    Par contre l'image "auberge_3.jpg" montre le résultat après un zoom +0.2 qui devrait me faire revenir à l'image initiale. Mais si la taille des objets est ok, leur position n'est pas bonne sachant que pour la position j'applique la même échelle que pour la taille : pos_x/y * scale. Or malheureusement ce qui ne marche pas dans un sens (passer de l'échelle 1 à l'échelle 0.8 correspond à faire pos_x/y * 0.8) ne marche pas dans l'autre sens (repasser de 0.8 à 1 ne correspond pas à 1, ni même à 1.2). Et je ne trouve pas quelle être la règle mathématique à appliquer dans ce cas, je sens qu'il y a une histoire de trigonométrie là-dedans (et j'ai toujours eu des boutons avec ça).
    Alors si quelqu'un a une idée sur la règle de calcul à appliquer pour calculer la position d'objets lors d'un zoom -/+, merci d'avance :-)
    Images attachées Images attachées    

  2. #2
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Par défaut
    Bonjour,

    Si j'ai bien compris, ton zoom marche bien, mais quand tu essaie de revenir à ta position initiale, ca ne fonctionne plus. Enfin le redimensionnement fonctionne mais pas le replacement (lors d'un dé-zoom).

    Donc après un zoom à 0.8, tu applique un dé-zoom à 1.2 pour revenir à l'échelle initiale (càd 1).

    Normalement, la logique voudrait que l'algorithme de zoom soit le même que le dé-zoom, seule la valeur change. C'est bien le cas?

    Si oui, montre nous un petit bout de code.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 78
    Par défaut
    Normalement, la logique voudrait que l'algorithme de zoom soit le même que le dé-zoom, seule la valeur change. C'est bien le cas?
    Bin ça se serait trop beau et surtout tellement plus simple, mais c'est pas le cas

    Exemple si j'applique cette règle :
    - J'ai un objet en position (x=100, y=100) avec aucun zoom => échelle 1
    - Je passe à un zoom de 80% => zoom négatif de -0.2 : 1 => échelle 0.8
    Je multiple mes coordonnées (x,y) par un coeff=0.8 et j'obtiens (x=80, y=80)
    => ok
    - Je repasse à l'échelle 1 : + 0.2
    Je multiple mes coordonnées (x,y) par un coeff=1.2 et j'obtiens (x=96, 96) alors que je veux obtenir (x=100,y=100)
    => ko
    Donc c'est ma règle de calcul du coeff qui est fausse et que je cherche à corriger.

  4. #4
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Par défaut
    Ok, donc une règle de 3 fera l'affaire :

    TU stock ton échelle (0.8) afin de pourvoir recalculer tes positions avant le zoom :

    (80 * 1) / 0.8 = 100

    à l'échelle 0.8 : position x = 80
    à l'échelle 1 : position x = 100

    Tu retombes sur tes pattes :p

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 78
    Par défaut
    Cool ça marche nickel, et la règle est tellement simple que j'ai honte de moi (et pourtant j'ai bien pensé à la règle de 3 mais bon mes neurones sont partis en vacances)

    merci à toi, t'es un chef (et surtout tes neurones fonctionnent)

  6. #6
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Par défaut
    Pas de soucis, parfois la réponse est tellement simple qu'on passe à côté. Ça arrive à tout le monde, ça m'arrive souvent d'ailleurs .

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

Discussions similaires

  1. Calcul de position 3D par triangulation
    Par neoirto dans le forum Mathématiques
    Réponses: 17
    Dernier message: 22/05/2015, 15h14
  2. position de bindingsource aprés filtre
    Par tinhinan6 dans le forum VB.NET
    Réponses: 1
    Dernier message: 29/10/2008, 15h18
  3. Calculer la position d'un point sur un polygone ?
    Par supergrey dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 12/06/2008, 09h40
  4. Réponses: 2
    Dernier message: 05/07/2007, 17h35
  5. [Math] Calcul de position de vecteur.
    Par Lucyberad dans le forum DirectX
    Réponses: 4
    Dernier message: 19/05/2007, 16h15

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