实现动态描画圆的问题
现在已有另外一个过程帮我不断地获取一些坐标点(基本上是在一个圆周上,但有时可能有错误的点)
现在我想每隔N个点就用这N个点计算它们围成的圆的圆心座标位置,并排除一些偏移太大的点,求算法,有程序函数的加分!!
再理想点,其实我想获取N+1个点后 , 第一个点的数据自动排除,在从2到N+1计算,如此类推,就像一个先入先出的队列
------解决方案--------------------什么叫偏大的点,拟制定好一个标准,自己删除就是了
数据放到列表中,如果到了N个,那么来一个就RemoveAt(0)
------解决方案--------------------
------解决方案--------------------你去看了就知道,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,如果你有几个点的误差,那么求和之后完全不影响结果,而黄色区域的选择则是为了减少计算量!!
------解决方案--------------------
------解决方案--------------------