C# 求点集的最小包围矩形
思路:
1、求点集的中心点
2、将点集绕矩形进行一系列角度的旋转,并求记录旋转点集的包围矩形的面积和旋转角度;
3,将面积最小的矩形绕点集中心点旋转回去。
// 1.寻找多边形的中心
public XYZ GetCenter(List<XYZ> pts)
{
double sumx = 0;
double sumy = 0;
foreach (var p in pts)
{
sumx = sumx + p.X;
sumy = sumy + p.Y;
}
var pt = new XYZ(sumx/pts.Count(),sumy/pts.Count(),0);
return pt;
}
// 2.旋转多边形,针对每个点实现绕中心点旋转
public XYZ RotatePt(XYZ inpt ,XYZ centerPt ,double theta)
{
double ix = inpt.X;
double iy = inpt.Y;
double cx = centerPt.X;
double cy = centerPt.Y;
double Q = theta / 180 * 3.1415926; //角度
double ox, oy;
ox = (ix - cx) * Math.Cos(Q) - (iy - cy) * Math.Sin(Q) + cx; //旋转公式
oy = (ix - cx) * Math.Sin(Q) + (iy - cy) * Math.Cos