0

幅と高さがわかっている長方形があります。次に、長方形を対角線上に分割して4つの三角形を形成します。ここで、点p(m、n)があり、その点が4つの三角形のうちのどの三角形にあるかを判断する必要があるとします。良いアルゴを教えてください。

4

3 に答える 3

4

対角線の一次方程式をよく知っています(2つの点があるため)。両方の対角線は2つの半平面を定義します。

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して、どの半平面が2番目の対角線の点であるかを見つけます。数がの場合、< 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; }else{テスト=0; } if((x> width / 2 && y> height / 2)){test1 = 1; } else {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 に答える