0

我有一个已知宽度和高度的矩形。现在对角线划分矩形以形成四个三角形。现在假设有一个点 p(m,n),我必须确定该点位于四个三角形中的哪个三角形中。请给我一些好的算法。

4

3 回答 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 回答