2015年02月01日

C#で長方形の交差判定

   このエントリーをはてなブックマークに追加 Clip to Evernote
どう書く?orgに感謝を込めて」シリーズ その67

■問題 (出題者:にしお さん)
ここに二つの長方形があります。左上隅のx座標、y座標、右下隅のx座標、y座標を それぞれleft, top, right, bottomとします。
また、おのおのの長方形についてleft < right, top < bottom が成り立つものとします。
この二つの長方形が重なっているかどうかを判定するコードを書いてください。
なお辺で接する場合(例えば(0, 0, 100, 100)と(100, 0, 200, 100))は 重なっていないものとします。
なお変数名に関して、例えば1番目の長方形の左上隅x座標がleft[0]なのかleft1なのか、 それともrect1.leftなのかは自由に選んで構いません。


IsOverlap というメソッド書いたのですが、WindowsFormsの場合は、 Rectangleクラスに、IntersectsWith というメソッドがあって、それを使うだけでした。
こんな短いメソッドですが、自作するときは、よくよく考えないとバグりますね。

using System;
using System.Drawing;
using System.Windows.Forms;


namespace Doukaku.Org {
    static class Program {
        static void Main() {
            Console.WriteLine(IsOverlap(
                new Rectangle(0, 0, 100, 100),
                new Rectangle(100, 0, 200, 100)).ToString());

            Console.WriteLine(
                new Rectangle(0,0,100,100).IntersectsWith(
                new Rectangle(100,0,200,100)).ToString());
        }

        private bool IsOverlap(Rectangle r1, Rectangle r2) {
            if ((r1.Left < r2.Right) && (r2.Left < r1.Right) &&
                (r1.Top < r2.Bottom) && (r2.Top < r1.Bottom))
                return true;
            return false;
        }              
    }
}



 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52403875