У меня есть треугольник: a
, b
, c
. Каждая вершина имеет значение: va
, vb
, vc
. В моем программном обеспечении пользователь тащит точку p
внутри и снаружи этого треугольника. Я использую барицентрические координаты, чтобы определить значение vp
в p
на основе va
, vb
и vc
. Пока что так хорошо.
Теперь я хочу ограничить p
так, чтобы vp
находился в пределах диапазона min
и max
. Если пользователь выбирает p
, где vp
равен < min
или > max
, как я могу найти точку, ближайшую к p
, где vp
равно min
или max
, соответственно?
Изменить: Вот пример, где я тестирую каждую точку. Светло-серый находится в пределах min
/max
. Как найти уравнения линий, которые составляют границу min
/max
?
a = 200, 180
b = 300, 220
c = 300, 300
va = 1
vb = 1.4
vc = 3.2
min = 0.5
max = 3.5
Изменить: FWIW, до сих пор я получаю барицентрические координаты v
, w
для p
, используя треугольные вершины a
, b
, c
(стандарт я думаю, но выглядит как this). Затем, чтобы получить vp
:
u = 1 - w - v
vp = va * u + vb * w + vc * v
Все в порядке. Моя проблема в том, что мне нужны линейные уравнения для min
/max
, поэтому я могу выбрать новую позицию для p
, когда vp
выходит за пределы диапазона. Новое положение для p
- это точка, ближайшая к p
в строке min или max.
Обратите внимание, что p
является координатой XY, а vp
является значением для этой координаты, определяемой треугольником, и значениями в каждой вершине. min
и max
также являются значениями. Упомянутые две линейные уравнения дадут мне XY-координаты, для которых значения, определяемые треугольником, равны min
или max
.
Не имеет значения, используются ли в решении барицентрические координаты.