我有一个已知宽度和高度的矩形。现在对角线划分矩形以形成四个三角形。现在假设有一个点 p(m,n),我必须确定该点位于四个三角形中的哪个三角形中。请给我一些好的算法。
user631854
问问题
103 次
3 回答
4
好吧,您知道对角线的线方程(因为您有两个点)。两条对角线都定义了两个半平面。
对角线1方程:
A1 * x + B1 * y + C1 = 0
对角线2方程:
A2 * x + B2 * y + C2 = 0
它成为了:
代A1 * m + B1 * n + C1
入找出第一个对角线所在的半平面。如果数字是< 0
,则它位于一个半平面内,如果是,则它位于另一个半平面> 0
内。
代A2 * m + B2 * n + C2
入找出第二条对角线所在的半平面。如果数字是< 0
,则它位于一个半平面内,如果是,则它位于另一个半平面> 0
内。
于 2012-06-15T06:31:42.190 回答
1
有趣的问题。我认为这个算法应该可以做到,但我还没有尝试过。假设矩形为 AxB,点为 p(m,n)。
int section = (m * B < n * A) * 2 + (m > A / 2 || n > B / 2);
然后,变量部分应该是 0 到 3 之间的值,具体取决于点所在的位置。这些部分称为:
0
2 1
3
如果您希望以另一种方式命名这些部分,请随时调整算法。
于 2012-06-15T06:51:44.457 回答
0
if((x * height < y * width) || ( x*width < y*height )) { test = 1; } 其他 { 测试 = 0; } if((x > 宽度 / 2 && y > 高度 / 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)和尺寸宽度*高度的矩形那么上面的代码工作正常......
于 2012-06-15T10:55:02.617 回答