Как определить подтреугольник внутри прямоугольника, учитывая координату в этом прямоугольнике

StackOverflow https://stackoverflow.com/questions/2310794

Вопрос

Problem illustration

Задан прямоугольник шириной 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) - это фиксированное значение).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top