日期:2014-05-17  浏览次数:20793 次

实现动态描画圆的问题
现在已有另外一个过程帮我不断地获取一些坐标点(基本上是在一个圆周上,但有时可能有错误的点)

现在我想每隔N个点就用这N个点计算它们围成的圆的圆心座标位置,并排除一些偏移太大的点,求算法,有程序函数的加分!!

再理想点,其实我想获取N+1个点后 , 第一个点的数据自动排除,在从2到N+1计算,如此类推,就像一个先入先出的队列

------解决方案--------------------
什么叫偏大的点,拟制定好一个标准,自己删除就是了
数据放到列表中,如果到了N个,那么来一个就RemoveAt(0)
------解决方案--------------------
探讨
IList<Point> listpoint = new IList<Point>();
怎么我这句就有错误呢?
无法创建抽象类或接口“System.Collections.Generic.IList<System.Drawing.……

------解决方案--------------------
你去看了就知道,List功能强大但是占用内存多谢,而IList功能稍弱,程序要求不高的话用List<>就好
------解决方案--------------------
还没有解决吗,楼主想的太复杂了,仔细想想圆的结构,只有正x,y轴的误差点才会对结果造成影响,对数组进行排序,去掉x,y轴的最大最小点,然后中心点就是圆心了,最大点差距就是直径,
代码如下,亲测有效
C# code

 List<int> x = new List<int>();
            List<int> y = new List<int>(); 
            if (mypoints.Count > 0)
            {
                foreach (Point p in mypoints)
                {
                    x.Add(p.X);
                    y.Add(p.Y);
                }
            }
            x.Sort();
            y.Sort();
            Point pcontent = new Point(x[x.Count / 2],y[y.Count / 2]);
            int radius = (x[x.Count - 1] - x[1]) / 2;
                using (Graphics g = this.CreateGraphics())
                {
                    Pen mypen = new Pen(Color.Black);
                    g.DrawEllipse(mypen,new Rectangle(pcontent.X - radius,pcontent.Y - radius,radius * 2,radius * 2));
                }

------解决方案--------------------

上面是算法图像说明:
1,根据你得到的圆周上的点,先找出他们的最小外接矩形,如红色矩形所示;
2,根据红色矩形,可以得出圆心所在的范围,可以设定一个阈值,这个范围,如黄色矩形所示;
3,遍历黄色区域的每一个像素,计算该像素位置与每个圆周点位置的距离之和Sum;
4,当Sum最小时的那个像素点的位置,就是你要找的圆心位置;
5,如果你有几个点的误差,那么求和之后完全不影响结果,而黄色区域的选择则是为了减少计算量!!
------解决方案--------------------
探讨

引用:

引用:

引用:
上面是算法图像说明:
1,根据你得到的圆周上的点,先找出他们的最小外接矩形,如红色矩形所示;
2,根据红色矩形,可以得出圆心所在的范围,可以设定一个阈值,这个范围,如黄色矩形所示;
3,遍历黄色区域的每一个像素,计算该像素位置与每个圆周点位置的距离之和Sum;
4,当Sum最小时的那个像素点……

------解决方案--------------------
探讨

引用:

引用:

引用:
上面是算法图像说明:
1,根据你得到的圆周上的点,先找出他们的最小外接矩形,如红色矩形所示;
2,根据红色矩形,可以得出圆心所在的范围,可以设定一个阈值,这个范围,如黄色矩形所示;
3,遍历黄色区域的每一个像素,计算该像素位置与每个圆周点位置的距离之和Sum;
4,当Sum最小时的那个像素点……