【 C# 】複数の点( Point )から矩形( Rectangle )を作る方法

C# Tips PROGRAMMING

こんにちは、mickです。

ここでは、複数の点( Point )から矩形( Rectangle )を作る方法を紹介

C# で矩形を作る構造体の Rectangle 。普通、この Rectangle 構造体は、点 Point 構造体とサイズ Size を指定すれば、作れるようになっています。

Rectangle(Int32, Int32, Int32, Int32)
Rectangle(Point, Size)

これだと、1つの点をみてだけしか矩形を作れない。自分は、複数の点を含む矩形がほしかった。で、それを実現するメソッドをつくってみました(もしかしたらすでにあるのかもしれないけれど、見つけられなかった…)。

やることはシンプルで、複数の点から、矩形の始点とサイズを割り出し、それを Rectangle 構造体に設定するというものです。

/// <summary>
/// 複数の点から矩形を作る。点がないときは、座標0で大きさのない矩形を作る。点が1つのときは、大きさのない矩形を作る。
/// </summary>
/// <param name="points">矩形に含めたい点</param>
/// <returns>できあがった矩形</returns>
public Rectangle Create(Point[] points)
{
    var miniX = Int32.MaxValue;
    var miniY = Int32.MaxValue;
    var maxX = Int32.MinValue;
    var maxY = Int32.MinValue;

    // 最小の座標点と最大の座標点(XとYおのおの)を割り出す
    foreach (Point point in points)
    {
        miniX = Math.Min(miniX, point.X);
        miniY = Math.Min(miniY, point.Y);
        maxX = Math.Max(maxX, point.X);
        maxY = Math.Max(maxY, point.Y);
    }
    // 矩形の大きさを割り出す
    var width = maxX - miniX;
    var height = maxY - miniY;

    // 点が1つでもあれば矩形をつくる
    if (points.Length != 0)
    {
        return new Rectangle(miniX, miniY, width, height);
    }
    else
    {// 点がなければ座標0で大きさのない矩形をつくる
        return new Rectangle(0, 0, 0, 0);
    }
}

あとはこれを RectangleCreater とか、RectangleGenerator とかで自分の好きなクラスに取り込んでしまえば OK。

おかしな点とか疑問点、こんな方法もあるよ、というのがあったら教えてくださいね。

記事を読んでくれて嬉しいです。
今日もありがとうございました。

初稿 2021/11/20