2015-10-09 3 views
1

У меня есть динамический прямоугольник, в котором создаются 4 подтреугольника (t0-t3) (путем добавления диагоналей из вершин). Когда задана некоторая координата x | y, то какой самый быстрый способ найти соответствующий треугольник ?. Прямоугольник имеет определенное положение и размер. Мне нужен только правый «id», а не вершины треугольника, поэтому, например, в графике, когда p1 задан как позиция 0, нужно вернуть, 3 в p2 и 2 в p3, ...Как найти соответствующий поддиапазон позиции внутри прямоугольника

Один из возможных Конечно, решение было бы создать треугольники и запрос, если точка содержится в одном из них, но это похоже на очень сложное решение для чего-то простого. Я также думал о создании вектора из центра и измерения угла, но он также кажется сложным в прямоугольнике с различными размерами.

Example Rectangle

+2

На словах: сравните наклон отрезка от нижнего левого угла прямоугольника до точки запроса с наклоном диагонали, соединяющим нижний левый угол прямоугольника с верхним правом углом. Это говорит вам, принадлежит ли точка к t0 или t3 по сравнению с t1 или t2. Аналогичным образом сравните наклон сегмента линии от нижнего правого угла к точке запроса с наклоном диагонали, соединяющей нижний правый угол с верхним левым углом. Затем вы знаете, находится ли точка в t0 или t1 по сравнению с t2 или t3. Вместе это говорит, какой из четырех треугольников находится в точке. – WhiteViking

ответ

0

Рассмотрим следующий пример:

Пусть нижний левый угол прямоугольника будет (0,0), а верхний правый угол будет (1,1). Теперь, две линии, которые образуют треугольники определяются как:

y = x and y = 1-x 

Для каждой точки, за исключением (.5, .5) мы имеем трехкомпонентный условное при заданном х или у. Например, учитывая, что х = 0,2, мы знаем, что:

если у < 0,2, мы находимся в нижнем треугольнике (t2),
Элиф 0,2 < < у +0,8, мы в левый треугольник (t3),
еще, мы находимся в верхнем треугольнике (t0).

Надеюсь, это поможет без явного указания кода.

+0

Спасибо, это было именно то, что я искал! – Thraein

+0

Нет проблем! Рад, что это было полезно. Выясните уравнения двух линий, и вам будет хорошо идти. –