Question

Je suis assis avec un crayon pour la meilleure partie de la soirée à essayer de se rappeler comment implémenter une fenêtre évolutive qui peut naviguer dans une zone 2D. Cela fait un moment que je l'ai d'abord entendu parler, mais je pense que je l'ai pensé à elle, j'ai juste besoin de vérifier.

Nous avons un monde 2D avec un système de coordonnées cartésiennes « classique », les points x-axe à droite, les points y-axe 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ù Pmin

. (P se trouve dans la fenêtre rect)

Pour afficher toute la fichue chose, nous avons une toile (par exemple) qui a un système de coordonnées « modifié », les points de l'axe x droite, axe y pointe vers le bas . La taille de la toile est MaxX et Maxy . La taille de la toile est fixée.

Maintenant, pour 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 coordonnées de système de toile

En d'autres termes: le calcul ci-dessus doit prendre soin d'afficher un point en prenant l'échelle et la position de vieport en compte. Ai-je raison ? Sinon, s'il vous plaît me prouver.

Était-ce utile?

La solution

Oui, cela est exact. Tous les points dans la fenêtre apparaîtront sur la toile - et seulement ces points - et tout apparaîtra à droite côté avec des distances conservées.

Autres conseils

Vous trouverez peut-être utile de créer une classe pour la fenêtre qui gère l'échelle et des plages. Il peut avoir des méthodes telles que

Point2 vp = viewport.transformFromWorld(Point2 pw);

et l'inverse:

Point2 pw = viewport.transformToWorld(Point2 vp);

Ceci est utile si vous choisissez un point du point de vue avec les coordonnées de viewport et que vous souhaitez transformer en monde.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top