| | Zoom centré | |
| | Auteur | Message |
---|
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Zoom centré Lun 16 Juin 2014 - 17:22 | |
| Bonjour tout le monde, Comme je suis sûr qu'il y en a qui ont le bac ou au moins des partiels en maths très bientôt, tonton Térence va vous faire réviser un peu Donc c'est simple, j'ai une fonction toute prête pour le zoom, mais, forcément, celui-ci est centré sur l'origine, et moi j'aimerais qu'il soit centré sur ma souris. Donc voilà tout ce que j'ai : viewX, viewY, mouseX, mouseY et zoom. Sachant que mouseX et mouseY sont les coordonnées de la souris par rapport au coin supérieur gauche de l'écran, pour avoir les coordonnées par rapport à l'origine suffit d'ajouter viewX et viewY. J'aimerais donc savoir quelles valeurs donner à viewX et viewY pour que mon zoom soit centré sur la souris ^^' Voilà, moi j'ai passé des heures dessus (même problème pour le jeu du premier concours), donc si quelqu'un me trouve ca en moins de deux secondes... Merci d'avance ! |
| | | D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Zoom centré Lun 16 Juin 2014 - 17:36 | |
| J'ai ni bac ni partiels alors je réponds pas ^^ |
| | | glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: Zoom centré Lun 16 Juin 2014 - 17:47 | |
| Ben... Interpolation je pose le calcul et j'edit EDIT : c'est bon, c'etait pas compliqué : - Code:
-
view_xview[0]=mouse_x/zoom*(zoom-1); view_yview[0]=mouse_y/zoom*(zoom-1); view_wview[0]=640/zoom; view_hview[0]=480/zoom; ATTENTION : zoom allant de 0+ a +infini si zoom = 2, tu zoom *2 (normal ^^) et zoom = 1, tout est normal
Dernière édition par gabin49 le Lun 16 Juin 2014 - 18:07, édité 1 fois |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| | | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Zoom centré Lun 16 Juin 2014 - 18:35 | |
| gabin49> C'est assez bizarre oO Quand viewX et viewY sont à 0et zoom à 1, ca marche, il zoome bien sur la souris, mais après, si la view est décalée ou que le zoom n'est plus à 1, il va se décaler et pas zoomer correctement sur l'endroit que j'ai choisi.. Donc j'ai l'impression que ta formule est fondamentalement juste, mais qu'elle tient pas compte du décalage de la view... C'est du java, pas du gml, donc, comme je l'ai dit avant, chez moi, mouseX et mouseY sont les coordonnées de la souris par rapport au coin supérieur gauche de l'écran, et pas par rapport à l'origine. Donc en principe suffirait d'ajouter viewX et viewY aux coordonnées de la souris, mais j'ai essayé et ca marche pas correctement :/ Donc si t'as une idée, merci d'avance ! (d'ailleurs je veux bien que tu m'explique d'où sort ta formule ^^') |
| | | glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: Zoom centré Lun 16 Juin 2014 - 21:55 | |
| Je pense avoir une idée :
déja declare une nouvelle variable newMouseX et newMouseY (ou un autre nom) pour prendre les coordonnées de la souris par rapport au haut-gauche de la view sans zoom (le décalage) et à la fenete tel que : newMouseX = mouseX - decaleX - windowX; newMouseX = mouseX - decaleY - windowY;
Sachant que si la view d'origine en haut-gauche de la fenetre, decaleX et decaleY sont égales a 0 (en clair, pas de décalage) Comme ca, la view zoomera bien en fonction de la souris.
avec ces nouvelles coordonnées newMouseX et Y, tu applique ce que j'ai dit précédemment et tout ce passera bien (normalement) |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Zoom centré Mar 17 Juin 2014 - 13:33 | |
| Ok merci, j'essaie ca demain et je te tiens au courant ! edit : Nop, marche pas :/ Toujours le même problème... Si t'as une autre idée... Merci quand même de ton aide en tous cas ! |
| | | GrandeLangue Bonne participation
Messages : 77 Localisation : Lille Projet Actuel : Faire des maths
| Sujet: Re: Zoom centré Mer 18 Juin 2014 - 2:26 | |
| À vrai dire, j'ai beau regardé la proposition de gabin dans tous les sens, je ne comprends pas d'où sors cette formule. En tout cas ce qui est sûr, c'est que ce n'est pas celle que tu cherches ^^ Donc j'ai passé un peu de temps sur GeoGebra (le meilleur logiciel de géométrie dynamique), et comme un schéma vaut toujours mieux qu'un long discours, je te conseille de regarder ce que ça donne: http://simpleupload.fr/?c=A0zzDEy!ulrwL0f5Tu as besoin d'installer GeoGebra pour le visualiser. Ou bien utilise GeoGebra en ligne. Comme tu peux le voir dans ce fichier, tu as un point View, qui représente dans ton jeu les coordonnées viewX et viewY. Ensuite il y a le centre d'homothétie, qui dans ton cas serait (mouseX, mouseY). Et finalement, il y a un nombre zoom, qui en réalité ici est l'inverse de ta variable zoom dans ton jeu (c'est-à-dire que j'ai fais en sorte que l'écran s'agrandissait quand ma variable zoom augmentait... ce qui est le contraire de ce que tu veux). J'ai considérer que toutes ces variables pouvaient être modifiées librement, comme c'est sûrement le cas dans ton jeu. Maintenant, le but est de calculer les nouvelles positions de View et du point K, qui n'est autre que (viewX + viewWidth, viewY + viewHeight), à chaque fois que la valeur de zoom est modifiée. C'est pour cela que si tu regardes dans les propriétés de zoom, à l'onglet Script, tu verras qu'à chaque fois que zoom est actualisé, ce morceau de code est exécuté: - Code:
-
View=Centre+zoom/previousZoom*(View-Centre) previousZoom=zoom Pourquoi ce code? Le format de "Centre+zoom/previousZoom*(View-Centre)" est le suivant: "centre + coefficient*vecteur", ce qui est une translation du point "centre" par "coefficient*vecteur". Le vecteur est celui de Centre à View. Et ce vecteur est multiplié par un coefficient... en fait tu remarqueras que toute cette formule n'est qu'une banale homothétie de centre "Centre" et de coefficient "zoom/previousZoom". Pour le point K, on fait de même. À moins que ce ne soit les valeurs de viewWidth et viewHeight qui t'intéresse, à ce moment-là il suffit de faire: - Code:
-
viewWidth*=zoom/previousZoom viewHeight*=zoom/previousZoom Ou bien comme je l'ai fait dans mon fichier Geogebra: - Code:
-
viewWidth=zoom*initialViewWidth viewHeight*=zoom*initialviewHeight Voilà, j'espère que ça aura été clair. Et n'hésite pas à utiliser GeoGebra dans le futur pour t'aider à trouver les formules, c'est un outil formidable. HS: je dirais même plus, c'est le meilleur logiciel d'animation (oui oui, j'ai bien dit "d'animation" : la preuve ici) |
| | | glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: Zoom centré Mer 18 Juin 2014 - 14:59 | |
| ah, je vois, c'est pas exactement ce que j'ai fait en effet. C'est le même zoom que Google Maps ou paint.net ^^ |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Zoom centré Mer 18 Juin 2014 - 15:14 | |
| ****** ca marche En rentrant ta formule telle quelle, ca marchait pas, mais effectivement vu que le truc geogebra marchait impec', c'est que ta formule était bonne, donc en testant quelques trucs, j'ai fini par tomber sur ca : trMouseX=viewX+mouseX/zoom; trMouseY=viewY+mouseY/zoom; viewX=trMouseX+lastZoom/zoom*(viewX-trMouseX); viewY=trMouseY+lastZoom/zoom*(viewY-trMouseY); Avec pour centre la souris. En fait iavait plusieurs trucs à modifier : la position réelle de la souris chez moi, bah faut la calculer >< c'est donc trMouse, et ensuite ton calcul est bon, faut juste remplacer zoom/lastZoom par lastZoom/zoom puisque chez toi plus la valeur zoom est grande plus on voit loin (et donc avec un écran à taille fixe, moins on zoom). Voilà, donc la ca marche parfaitement, merci beaucoup ! Concernant Geogebra, on a dû l'utiliser deux-trois fois au lycée donc bon Mais je conviens que c'est très utile dans certains cas (genre ici ^^), surtout si on peut l'utiliser en ligne. Voilà, donc encore merci à vous deux pour votre aide |
| | | GrandeLangue Bonne participation
Messages : 77 Localisation : Lille Projet Actuel : Faire des maths
| Sujet: Re: Zoom centré Mer 18 Juin 2014 - 17:00 | |
| De rien En effet, les calculs de Geogebra étaient fait avec les coordonnées de Centre par rapport à l'Origine, d'où (trMouseX, trMouseY). |
| | | Contenu sponsorisé
| Sujet: Re: Zoom centré | |
| |
| | | | Zoom centré | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |