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