Как определить подтреугольник внутри прямоугольника, учитывая координату в этом прямоугольнике
-
22-09-2019 - |
Вопрос
Задан прямоугольник шириной w и высотой h.и координаты x, y в этом прямоугольнике, я хотел бы определить, в каком треугольнике я нахожусь.
т. е.функция должна принимать параметры (x, y) и возвращать a, b, c, d или число на основе нуля, представляющее этот индекс треугольника, т.е.(0= A, 1= B, 2= C, 3= D), если они расположены в таком порядке.
Я думаю, это было бы что-то вроде >= формулы красной линии и >= формулы зеленой линии?
Я бы хотел реализовать это в VB.NET
Решение
aboveRed = x*h > y*w;
aboveGreen = (w-x)*h > y*w;
if (aboveRed)
{
if (aboveGreen) return "C"; else return "B";
}
else
{
if (aboveGreen) return "D"; else return "A";
}
Другие советы
Уравнение зеленой линии: h * x + w * y = h * w
Уравнение красной линии: x * h - y * w = 0
Public Function GetTriangleNumber(ByVal x As Integer, ByVal y As Integer)
As Integer
Dim overGreenLine As Boolean = ((((h * x) + (w * y)) - (h * w)) < 0)
Dim overRedLine As Boolean = (((h * x) - (w * y)) > 0)
If overGreenLine Then
Return IIf(overRedLine, 2, 3)
End If
Return IIf(overRedLine, 1, 0)
End Function
Я бы рассмотрел угол наклона линии к точке от верхнего левого и верхнего правого углов.Если оно меньше 45 градусов (с поправкой на базовое направление кромки) в обоих случаях, то точка находится в точке C.Другие комбинации будут охватывать остальные три треугольника.
На самом деле вам не нужно вычислять обратные тригонометрические функции, чтобы сделать это, поскольку соотношение длин линий дает вам достаточно информации (и sin(45)...или, скорее, sin(pi/4) - это фиксированное значение).