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