2つの四角形が重なる条件

ビル・ゲイツの面接試験−私の場合 より、
うーん、真っ先に「重なる」という事象に対して「四角を構成する線分の太さを0と仮定する場合」と「太さがある場合」に場合わけしちゃうのはダメなんだろうか(苦笑
数式を < にするか ≦ にするかの差でしかないことかもしれないが、ハードウェア制御などでは、これはものすごく重要な話でもあったりする。

1 2 3 4 5
2



3



4



5



このような、(1, 1) から (5, 5) の座標を構成する四角形、あなたから見て、そしてあなたの使うクラスライブラリからみて、幅丈はいくつですか?
ちなみに、.NET の System.Drawing.Rectangle.FromLTRB(1, 1, 5, 5).Width は4です。

ちなみに、

私の場合、四角Bの4頂点の座標が、四角Aに含まれているかを4回検査し、最後に四角Aの4頂点のうち1つが四角Bに含まれているか調査する、ということショートサーキットで調べると考えました。

  bool RectOnRect(Rect a, Rect b)
  {
    return PtInRect(a, b[1])
        || PtInRect(a, b[3])
        || PtInRect(a, b[7])
        || PtInRect(a, b[9])
        || PtInRect(b, a[7]);
  }

  bool PtInRect(Rect r, Pt p)
  {
    return (r.Left   < p.X)
        && (r.Right  > p.X)
        && (r.Top    < p.Y)
        && (r.Bottom > p.Y);
  }

まあ、実装位置としては Rect 構造体の Contains メソッドなので引数は多少違うんですが…。