决定点是在矩形的哪个部分

时间:2012-06-15 06:20:24

标签: algorithm

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

3 个答案:

答案 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)和尺寸宽度*高度的矩形 然后上面的代码工作正常......