こんにちは、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