Rectangle 構造体

コンストラクタ

public Rectangle (System.Drawing.Point location, System.Drawing.Size size);
public Rectangle (int x, int y, int width, int height);
Rectangle コンストラクター (System.Drawing) | Microsoft Learn
Rectangle r1 = new Rectangle(1, 2, 3, 4); // {X = 1 Y = 2 Width = 3 Height = 4}

Rectangle r2 = r1; // {X = 1 Y = 2 Width = 3 Height = 4}
r2.Offset(1, 1);   // {X = 2 Y = 3 Width = 3 Height = 4}

RectangleFからは、下表の静的メソッドから変換できます。

メソッド 機能
Ceiling(RectangleF) 値を切り上げる
Round(RectangleF) 値を丸める
Truncate(RectangleF) 値を切り捨てる

プロパティ

プロパティ 内容
int X 左上隅のx座標
int Y 左上隅のy座標
int Width
int Height 高さ
Point Location 左上隅の座標。getではnew Point(X, Y)が返される Location - Rectangle.cs
Size Size サイズ。getではnew Size(Width, Height)が返される Size - Rectangle.cs
int Left 左上隅のx座標。Xから取得するのと同じ Left - Rectangle.cs
int Top 左上隅のy座標。Yから取得するのと同じ
int Right 右上隅のx座標。X+Width
bool IsEmpty X、Y、Width、Heightのすべてがゼロならばtrue IsEmpty - Rectangle.cs
     

メソッド

静的メソッド
メソッド 機能
Union(Rectangle, Rectangle) 指定のRectangleが結合したRectangleを得られる
   
メソッド 機能
Inflate(Size) このRectangleの大きさを、変更できる。中心を維持しながら、XとY方向それぞれに拡大される
Offset(Point) このRectangleの位置を、変更できる
Contains(Point) 指定位置が、このRectangleに含まれているか判定できる
Contains(Rectangle) 指定のRectangleの全体が、このRectangleに含まれているか判定できる
Intersect(Rectangle) このRectangleを、指定のRectangleとの交差部分に置き換えられる
IntersectsWith(Rectangle) 指定のRectangleが、このRectangleと交差するか判定できる
   
Rectangle rec = new Rectangle(0, 0, 100, 200);
// {X = 0 Y = 0 Width = 100 Height = 200}

rec.Inflate(100, 100); // {X = -100 Y = -100 Width = 300 Height = 400}
rec.Offset(10, 10);    // {X = -90 Y = -90 Width = 300 Height = 400}

Inflate()

中心を維持しながら、XとY方向それぞれに拡大できます。左上を維持しながら拡大するには、WidthやHeightを変更します。

public void Inflate (int width, int height);
Inflate(Int32, Int32) - Rectangle.Inflate メソッド (System.Drawing) | Microsoft Learn
Rectangle r1 = new Rectangle(-20, -10, 40, 20); // {X = -20 Y = -10 Width = 40 Height = 20}
r1.Inflate(10, 20);                             // {X = -30 Y = -30 Width = 60 Height = 60}

Rectangle r2 = new Rectangle(0, 0, 20, 10); // {X = 0 Y = 0 Width = 20 Height = 10}
r2.Inflate(10, 20);                         // {X = -10 Y = -20 Width = 40 Height = 50}

このメソッドは次のように実装されています。

public void Inflate(int width, int height) {
    this.X -= width;
    this.Y -= height;
    this.Width += 2*width;
    this.Height += 2*height;
}
Inflate - Rectangle.cs

Offset()

位置を変更できます。

Rectangle r1 = new Rectangle(-20, -10, 40, 20); // {X = -20 Y = -10 Width = 40 Height = 20}
r1.Offset(10, 20);                              // {X = -10 Y = 10 Width = 40 Height = 20}

Rectangle r2 = new Rectangle(0, 0, 20, 10); // {X = 0 Y = 0 Width = 20 Height = 10}
r2.Offset(10, 20);                          // {X = 10 Y = 20 Width = 20 Height = 10}

このメソッドは次のように実装されています。

public void Offset(int x, int y) {
    this.X += x;
    this.Y += y;
}
Offset - Rectangle.cs

IntersectsWith()

このRectangleが、指定のRectangleと交差するか確認できます。

public bool IntersectsWith (System.Drawing.Rectangle rect);
Rectangle.IntersectsWith(Rectangle) メソッド (System.Drawing) | Microsoft Learn

このメソッドは次のように実装されており、指定のRectangleに内包されていたり、Rectangleを内包している場合も交差していると判定されます。

public bool IntersectsWith(Rectangle rect) {
    return(rect.X < this.X + this.Width) &&
    (this.X < (rect.X + rect.Width)) &&
    (rect.Y < this.Y + this.Height) &&
    (this.Y < rect.Y + rect.Height);
}
IntersectsWith - Rectangle.cs
Rectangle r = new Rectangle(10, 10, 20, 20);
bool b1 = r.IntersectsWith(new Rectangle(15, 0, 10, 40));  // true
bool b2 = r.IntersectsWith(new Rectangle(0, 0, 5, 5));     // false
bool b3 = r.IntersectsWith(new Rectangle(0, 0, 40, 40));   // true
bool b4 = r.IntersectsWith(new Rectangle(15, 15, 10, 10)); // true

Union()

2つのRectangleが結合 (union) したRectangleを取得できます。

public static System.Drawing.Rectangle Union (
    System.Drawing.Rectangle a,
    System.Drawing.Rectangle b
    );
Rectangle.Union(Rectangle, Rectangle) メソッド (System.Drawing) | Microsoft Learn
Rectangle r1 = new Rectangle(10, 0, 10, 30);
Rectangle r2 = new Rectangle(0, 10, 30, 10);

Rectangle r3 = Rectangle.Union(r1, r2);              // "{X=0,Y=0,Width=30,Height=30}"
Rectangle r4 = Rectangle.Union(r1, Rectangle.Empty); // "{X=0,Y=0,Width=20,Height=30}"

このメソッドは次のように実装されています。

public static Rectangle Union(Rectangle a, Rectangle b) {
    int x1 = Math.Min(a.X, b.X);
    int x2 = Math.Max(a.X + a.Width, b.X + b.Width);
    int y1 = Math.Min(a.Y, b.Y);
    int y2 = Math.Max(a.Y + a.Height, b.Y + b.Height);

    return new Rectangle(x1, y1, x2 - x1, y2 - y1);
}
Union - Rectangle.cs
Microsoft Learnから検索