C#获取圆上等分点坐标

复制代码
/// <summary>
        /// 获得圆上的等分点
        /// </summary>
        /// <param name="pdCenter">圆心坐标</param>
        /// <param name="dRadius">半径</param>
        /// <param name="nEquinoxNums">点数量</param>
        /// <param name="points">输出等分点坐标集合</param>
        public static void GetEqualPointOfCircle(Point2d pdCenter, double dRadius, int nEquinoxNums, out List<Point2d> points)
        {
            points = new List<Point2d>();
            double dEquinoxAngle = 360.00 / nEquinoxNums;
            Point2d p1, p2;
            double dAngle = 0;      
            points.Clear();

            for (int i = 0; i < nEquinoxNums; i++)
            {
                GetPointsOfLine(pdCenter, dAngle, 2 * dRadius,out p1,out p2); //两点任选一
                points.Add(p1);
                dAngle += dEquinoxAngle;
            }
        }
        /// <summary>
        ///通过直线的中心点、长度和旋转角度获得直线的两个端点坐标
        /// </summary>
        /// <param name="pdCenter">直线中心(圆心)</param>
        /// <param name="dAngle">与X轴夹角</param>
        /// <param name="dLength">线长度(直径)</param>
        /// <param name="vpdEndPoints">直线的起始点和结束点</param>
        private static void GetPointsOfLine(Point2d pdCenter, double dAngle, double dLength,out Point2d pdStart,out Point2d pdEnd)
        {     
            pdStart.X = pdCenter.X - Math.Cos(dAngle * Math.PI / 180.0) * 0.5 * dLength;
            pdStart.Y = pdCenter.Y - Math.Sin(dAngle * Math.PI / 180.0) * 0.5 * dLength;
            pdEnd.X = pdCenter.X * 2 - pdStart.X;
            pdEnd.Y = pdCenter.Y * 2 - pdStart.Y; 
        }
复制代码

调用代码:

Cv2.Circle(img, new OpenCvSharp.Point(img.Width / 2, img.Height / 2), 200, new Scalar(255), 2);
            CaliperTool.GetEqualPointOfCircle(new OpenCvSharp.Point(img.Width / 2, img.Height / 2),200,10,out List<Point2d> point);
            for (int i=0;i< point.Count;i++) 
            {
                Cv2.Circle(img, (int)point[i].X, (int)point[i].Y,10,new Scalar(255));
            }

 

posted @   JIAXUN  阅读(257)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示