C# 求点集的最小包围矩形

本文介绍了使用C#求解点集的最小包围矩形的方法,通过计算点集中心,旋转点集并记录最小面积矩形及其旋转角度,最后将最小面积矩形恢复到初始位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值