Je me suis assis avec un crayon pendant la plus grande partie de la soirée en essayant de me rappeler comment implémenter une fenêtre évolutive qui peut naviguer dans une zone 2D. Cela fait un moment que j'en ai entendu parler pour la première fois, mais je pense que j'ai compris, je dois juste vérifier.Besoin de quelqu'un pour vérifier que mes maths sont corrects
Nous avons un monde 2D avec un système de coordonnées cartésien "classique", les points de l'axe des x vers la droite, les points de l'axe des y vers le haut.
Dans la région du monde, nous avons une fenêtre rectangulaire définie par 2 points Pmin et Pmax, où: Pmin (xmin, ymin), Pmax (xmax, ymax). Ces points définissent la taille de fenêtre, l'emplacement et l'échelle
Dans la région du monde, nous avons un point P, où P Pmin < (x, y) < Pmax. (P est dans le viewport rect)
Pour afficher l'ensemble de la foutue chose, nous avons une toile (par exemple) qui a un système de coordonnées "altéré", les points de l'axe des x à droite, l'axe des y descend. La taille de la toile est MaxX et MaxY. La taille de la toile est fixe.
Maintenant, afin d'afficher le point P '(x', y ') dans la toile que je dois calculer sa position comme ceci:
x' = (x - xmin) * Sx
, où Sx = MaxX/(xmax - xmin)
y' = MaxY - (y - ymin) * Sy
, où Sy = MaxY/(ymax - ymin)
* S'il vous plaît noter que y » coord est inversée en raison de la toile de système de coordonnées
Dans d'autres w ords: les maths ci-dessus doivent prendre soin d'afficher un point tout en prenant en compte la taille et la position de vieport. Ai-je raison ? Si non, s'il vous plaît me prouver le contraire.
Bravo pour la réponse rapide - Je peux maintenant mourir un homme heureux – Maciek