幅 w、高さ h の長方形が与えられます。その長方形の座標x、yで、どの三角形にいるのかを特定したいと思います。
つまり、関数はパラメータ (x,y) を取り、a、b、c、d または三角形のインデックスを表す 0 ベースの数値を返す必要があります。つまり、(0=A,1=B,2=C,3=D)その順序で。
これは、>= 赤い線の式と>= 緑の線の式のようなものになると思いますか?
これをVB.NETで実装したい
幅 w、高さ h の長方形が与えられます。その長方形の座標x、yで、どの三角形にいるのかを特定したいと思います。
つまり、関数はパラメータ (x,y) を取り、a、b、c、d または三角形のインデックスを表す 0 ベースの数値を返す必要があります。つまり、(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 にあります。他の組み合わせは、他の 3 つの三角形をカバーします。
これを行うために実際に逆三角関数を計算する必要はありません。線の長さの比率で十分な情報が得られるからです (そして、sin(45) ... またはむしろ sin(pi/4) は固定値です)。 .