如何在给定该矩形中的坐标的矩形内识别子三角形

时间:2010-02-22 12:27:00

标签: vb.net geometry linear-equation

Problem illustration http://i49.tinypic.com/2iui4g.jpg

给出宽度为w且高度为h的矩形。我想在那个矩形中找到一个坐标x,y,我想知道我在哪个三角形内。

即。该函数应该取参数(x,y)并返回a,b,c,d或表示该三角形索引的零基数,即(0 = A,1 = B,2 = C,3 = D)如果它们在那个命令。

我认为这就像> =红线的公式和> =绿线的公式?

我想在VB.NET中实现它

3 个答案:

答案 0 :(得分:6)

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";
}

答案 1 :(得分:3)

绿线方程: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

答案 2 :(得分:1)

我会考虑从左上角和右上角开始的线的角度。如果它在两种情况下小于45度(调整边缘的基本方向),则该点在C中。其他组合将覆盖其他三个三角形。

你实际上并不需要计算逆三角函数来做到这一点,因为线的长度比给你足够的信息(而sin(45)......或者更确切地说sin(pi / 4)是一个固定价值)。