У меня есть триангулированная изометрическая сетка, как это:

В моем коде, треугольники группируются по столбцам.
Как я наведу мышь, я хочу, чтобы вычислить, что треугольник координата мыши в. Существует простой алгоритм, чтобы сделать это?
У меня есть триангулированная изометрическая сетка, как это:

В моем коде, треугольники группируются по столбцам.
Как я наведу мышь, я хочу, чтобы вычислить, что треугольник координата мыши в. Существует простой алгоритм, чтобы сделать это?
То, что вы хотите сделать, это превратить это в сетке как можно больше, потому что сетки гораздо легче работать.
Первое, что вы делаете работу, что колонка это. Вы говорите, что вы храните, что так должно быть проще, делая простое целочисленное деление на координаты х по ширине столбца компенсировано началом окна. Легко.
После того, что вы хотите, чтобы выяснить, что треугольник это в (очевидно). Как вы частично превратить это в сетку вы делаете вид, что у вас есть стек под прямым углом треугольника вместо стека изометрических треугольников.
Эти треугольники имеют длину вдоль оси у (сторона колонны). Разделите это число на два и работать, сколько шагов вниз вы. На основании числа шагов вниз и, если столбец является четным или нечетным сообщит вам, если вы смотрите на:
+--------+
|-_ |
| -_ |
| -_ |
| -_|
+--------+
или наоборот. На этом этапе вам нужно только определить, какая сторона линии это на, чтобы определить, какое право треугольника это в, который также указывает, какой изометрический треугольник это в.
У вас есть несколько вариантов для этого.
Можно даже использовать (1) для создания (2) в качестве быстрого поиска.
Единственная вещь, чтобы рассмотреть то, что происходит, если курсор мыши находится на краю?
Это похоже на то, что сказал Клетус, но по-другому взглянуть на него, я полагаю.
Я предполагаю, что сторона треугольника 1.
Предположим, у вас есть сетки, как показано ниже:
y'
/
/__/__/__/__/__/__/
/__/__/__/__/__/__/
/__/__/__/__/__/__/____ x'
(0,0)
Если вы считаете сетки в системе координат, в которой х и у оси расположена под углом 60 градусов, точка которой координата в угловой системе (х «у») будет соответствовать координате в ортогональная система (с тем же происхождением общего направления осей) к (х, у).
В ваших проблемах, вы получаете (х, у), мы должны найти (х «у»), а затем выяснить треугольник.
Если я единичный вектор вдоль х и у ортогональной вдоль у, то мы имеем, что
x'* i + y'( i/2 + sqrt(3) * j /2) = xi + yj.
(В основном единичный вектор вдоль «» под углом у оси я / 2 + SQRT (3) / 2 * J. Единичный вектор вдоль оси х таким же, как нормальная оси х, то есть я).
таким образом
x' + y'/2 = x
y' * sqrt(3)/2 = y
Решение дает:
y' = 2*y/sqrt(3)
x' = x - y/sqrt(3)
Предположим теперь, что х «и у» положительны.
Теперь, если с = [х «], целая часть х»
и г = [у «], целая часть у»
затем в (угловой) сетке, точка лежит в столбце Cth и г-й строке. (Подсчет вправо и вверх и начинает отсчет с 0).
Таким образом, мы сузили точку параллелограмма
____
/\ * /
/___\/
(c,r)
Теперь для того, чтобы выяснить, какой треугольник это в вы можете рассмотреть дробные части х «и у».
{x} = x' - [x'] = x' - c.
{y} = y' - [y'] = y' - r.
Теперь,
если {x} + {y} > 1, то точка лежит в треугольнике , отмеченные *. если {x} + {y} < 1, то точка лежит в другом треугольнике. если{x} + {y} = 1 , то точка лежит на прямой , общей для двух треугольников.
Надеюсь, что тоже помогает.