首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

实现动态描画圆的有关问题

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

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

现在我想每隔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最小时的那个像素点……

热点排行