Galaxy2D Tutorials Галактика 2D
Отображение экранных координат в координаты карты.


Date: Mon, 20 May 1996 08:08:16 -0500 (CDT)
From: Lennart Steinke
To: Jason Kaczor
Subject: Re: Help: Isometric/Axonometric

 

 [...]

 

Как получить координаты мыши ..., это еще одна проблема. По крайней мере, это было для меня. Это отняло у меня некоторое время, сваливая все, что я знаю в одну кучу и, добавив туда несколько "хитрых идей" ... в заключение, я использовал два линейных уравнения.

 

Обращайтесь с вращаемыми x-y оси как с линиями, и проверьте, где они пересекаются с экранными осями. Я использую мировые координаты. Воображаю полную карту, выведенную в ОЧЕНЬ БОЛЬШОМ буфере за экраном. Каждая точка теперь имеет уникальные координаты ..., это - то, что я называю мировые координаты. Затем я вычисляю соответствующие координаты карты только когда необходимо (прокрутка, проверка на пересечение).

 

Скажем, что ваши (наземные) клетки - 32x16. Я назову половину ширины как q и половину высоты как p. Это дает нам наклон m как p/q = 0.5. Для изометрической оси y, (-m) для x оси.

 

W0x - точка где линия пересекает ось x

 

       W0x=(map height)*q

 

Поэтому, для вашей [3/3] карты, W0x = 48.

W0y, точка где линия x координата - нуль

 

          W0y=0-m*W0x

 

Поэтому, W0y = -24.

Линия определена как

 

  y=mx+b   -

  b=y-mx   -

  x=(y-b)/m

 

Скажем, на карте 3/3 с клетками 32x16, и возьмем точку P (x=48/y=8), которая находится в центре карты (0/0).

 

  xm + y

( -------  - W0x ) / (2q) = x'

     m

 

 

  48*0.5 + 8                    32

( ---------- - 48) / (32) =  (----- - 48) / 32 = (64-48)/32 = 0.5

     0.5                       0.5

 

Сейчас, y координата

 

    | (y- mx) - W0y |   | 8 - 0.5*48 - (-24) |    | - 16 + 24 |     | 8 |  

y'= ----------------- = ----------------------  = ------------- =   -----

           2p                     16                    16            16  

 

     8

y'= -- = 0.5

    16

 

Надеюсь, что помог Вам.

Lennart Steinke

PMG  11 марта 2004 (c)  Сергей Анисимов