12

編集:

誰かが興味を持った場合に問題を解決するために使用した単純なコード(Fredrikに感謝):

    int windowOverlap(Rectangle rect1, Rectangle rect2)
    {
        if (rect1.IntersectsWith(rect2))
        {
            Rectangle overlap = Rectangle.Intersect(rect1, rect2);
            if (overlap.IsEmpty)
                return overlap.Width * overlap.Height;
        }

        return 0;
    }

元の質問:

2つの長方形が重なっているかどうか、および重なっている面積を計算しているかどうかを確認するための簡単で汚い方法を知りたいです。好奇心のために、1)両方の長方形のすべての線が垂直または水平である場合、または2)任意の2つの長方形の一般的な場合に興味がありますが、本当に必要な答えはケース1だけです。

私は次のように考えています:

double areaOfOverlap( Rect A, Rect B)
{
    if ( A.Intersects(B) )
    {
        // calculate area
        // return area
    }

    return 0;
}

A.Intersects()の場合、分離軸テストを使用することを考えていましたが、長方形に水平線と垂直線しかない場合、さらに簡単な(より高速な)チェック方法はありますか?

そして、それらが交差する面積を計算するために、長方形が水平線と垂直線のみである場合、それを行う簡単な方法はありますか?

最後に、これは質問とは関係ありませんが、コンピュータグラフィックスの数学を復習できる良い本/ウェブページについて誰かがアドバイスをいただければ幸いです。私はしばらく大学を卒業していて、すべてを忘れているような気がします:)!他の誰かがその問題を抱えていますか?

(注:この質問はこれとは異なり、より複雑に見え、質問に直接答えることはできません。)

4

2 に答える 2

12

多分私はあなたの質問を誤解します、しかしRectangle.Intersect方法は仕事をしませんか?交差する面積を返すので、簡単に面積を計算できます。

于 2009-10-11T17:47:00.447 に答える
1

基本的な衝突検出のように聞こえます。ウィキペディアでこのページを見たことがありますか?

マイク

編集:フレドリックは私がこれを作ったのと同時に彼の応答をしました、彼の答えは私の賛成を得ました(:

于 2009-10-11T17:48:20.787 に答える