Как идентифицировать подтреугольник внутри прямоугольника по координате в этом прямоугольнике - PullRequest
1 голос
/ 22 февраля 2010

Problem illustration

Учитывая прямоугольник ширины w и высоты h. и координату x, y в этом прямоугольнике, я хотел бы определить, в каком треугольнике я нахожусь.

т.е. функция должна принимать параметры (x, y) и возвращать a, b, c, d или число на основе нуля, представляющее этот индекс треугольника, т.е. этот порядок.

Я думаю, это было бы что-то вроде> = формулы красной линии и> = формулы зеленой линии?

Я хотел бы реализовать это в VB.NET

Ответы [ 3 ]

6 голосов
/ 22 февраля 2010
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";
}
3 голосов
/ 22 февраля 2010

Уравнение зеленой линии: 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
1 голос
/ 22 февраля 2010

Я бы рассмотрел угол наклона линии к точке от верхнего левого и верхнего правого углов. Если оно меньше 45 градусов (с учетом базового направления кромки) в обоих случаях, то точка находится в C. Другие комбинации покроют три других треугольника.

На самом деле вам не нужно вычислять обратные функции триггера, чтобы сделать это, так как отношение длин строк дает вам достаточно информации (а sin (45) ... или, скорее, sin (pi / 4) - это фиксированное значение).

...