我有一个已知宽度和高度的矩形。现在对角线有一个矩形,形成四个三角形。现在假设有一个点p(m,n),我必须确定该点位于四个三角形中的哪个三角形中。 请建议我一些好的算法。
答案 0 :(得分:4)
嗯,你知道对角线的线方程(因为你有两个点)。两个对角线都定义了两个半平面。
Diagonal1等式:
A1 * x + B1 * y + C1 = 0
Diagonal2等式:
A2 * x + B2 * y + C2 = 0
变成:
替换A1 * m + B1 * n + C1
以找到哪个半平面是第一个对角线的点。如果数字是< 0
,那么它位于一个半平面中,如果它是> 0
则它位于另一个半平面中。
替换A2 * m + B2 * n + C2
以找到哪个半平面是第二个对角线的点。如果数字是< 0
,那么它位于一个半平面中,如果它是> 0
则它位于另一个半平面中。
答案 1 :(得分:1)
有趣的问题。我认为这个算法应该这样做,但我还没有尝试过。假设矩形是AxB,点p(m,n)。
int section = (m * B < n * A) * 2 + (m > A / 2 || n > B / 2);
变量部分应该是0到3之间的值,具体取决于点所在的位置。这些部分称为:
0
2 1
3
如果你想以另一种方式命名这些部分,可以随意调整算法。
答案 2 :(得分:0)
if((x * height&lt; y * width)||(x * width&lt; y * height)) { test = 1; } 其他 { test = 0; } if((x&gt; width / 2&amp;&amp; y&gt; height / 2)) { TEST1 = 1; } 其他 { TEST1 = 0; } int section =(test)* 2 +(test1);
switch(section)
{
case 0:
Log.d("ABSAR","UP button");
break;
case 1:
Log.d("ABSAR","RIGHT button");
break;
case 2:
Log.d("ABSAR","LEFT button");
break;
case 3:
Log.d("ABSAR","DOWN button");
break;
}
`如果点P(x,y)和尺寸宽度*高度的矩形 然后上面的代码工作正常......