中点Brehensam画圆算法】的更多相关文章

#include<stdio.h> #include<stdlib.h> #include<graphics.h> #include<math.h> void MidBrehansemCircle(int x, int y, int radius); int main() { int gdriver = DETECT, gmove; int x, y, radius; printf("Please input circle corner:\n&qu…
#include<stdio.h> #include<stdlib.h> #include"graphics.h" //函数声明 void MidBrehansem(int x0, int y0, int x1, int y1); //中点MidBrehansem算法 void swap(int &x, int &y); //利用引用传递交换值 int main() { int gdriver = DETECT, gmode; int x0, y…
这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步. 算法步骤: (1) 输入圆的半径R. (2) 计算初始值d = 1 - R, x  = 0; y = R. (3) 绘制点(x, y), 及其在八分圆中的另外7个对称点. (4) 判断d的符号,若d < 0, 则先将d更新为d+2*x+3,再将(x,y)更新为(x+1, y),否则将d更新为d+2*(x - y) + 5,再将(x, y)更新为(x+1, y-1).…
在我们内部开发使用的一个工具中,我们需要几乎从 0 开始实现一个高效的二维图像渲染引擎.比较幸运的是,我们只需要画直线.圆以及矩形,其中比较复杂的是画直线和圆.画直线和圆已经有非常多的成熟的算法了,我们用的是Bresenham的算法. 计算机是如何画直线的?简单来说,如下图所示,真实的直线是连续的,但我们的计算机显示的精度有限,不可能真正显示连续的直线,于是我们用一系列离散化后的点(像素)来近似表现这条直线. (上图来自于互联网络,<计算机图形学的概念与方法>柳朝阳,郑州大学数学系) 接下来的…
开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 500 #define HEIGHT 500 #define OFFSET 15 #define R 8 void Init() //其它初始化 { glClearColor(1.0f,1.0f,1.0f,1.0f); //设置背景颜色,完全不透明 glColor3f(1.0f,0.0f,0.0f); //设置画笔…
bresenham算法画圆思想与上篇 bresenham算法画线段 思想是一致的 画圆x^2+y^2=R^2 将他分为8个部分,如上图 1. 只要画出1中1/8圆的圆周,剩下的就可以通过对称关系画出这个圆 X变化从0->R 那为什么不采用从-R->R呢, Y=+-sqrt(R^2-x^2); dy/dx=-x/(sqrt(R^2-x^2)) =-x/y 所以采用从-R到R,每次横坐标增1,计算量大,而且在(x=+-R,y=0)处,x的很小变化就引起了y的很大变化. 所以不是采用x从-R---&…
为了能以任意点为圆心画圆,我们可以把圆心先设为视点(相当于于将其平移到坐标原点),然后通过中点法扫描转换后,再恢复原来的视点(相当于将圆心平移回原来的位置). 圆心位于原点的圆有四条对称轴x=0,y=0,x=y和x=-y,从而圆上一点(x,y),可得到其关于四条对称轴的七个对称点,这称为八对称性,下面的函数就用来显示(x,y)及其七个对称点. void CirclePoints(int x,int y,long color,CDC *pDC) { //第1象限 pDC->SetPixel(x,y…
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 某个项目需求中需要在前端进行画圆查询,将圆范围上的多边形要素在前端进行展示.因为此项目的环境是AGS环境,考虑使用AGS的I查询来完成. 2.I查询的相关参数介绍 I查询中主要涉及到如下几个参数:geometry.geometryType.layerDefs.layers.tolerance.mapExtent.imageDisplay等. 2.1理解相对简…
中点画圆算法        如同光栅画线算法,我们在每一个步中以单位间隔取样并确定离指定圆近期的像素位置.对于给定半径r和屏幕中心(xc,yc),能够先使用算法计算圆心在坐标原点(0, 0)的圆的像素位置,然后通过将xc加到x且yc加到y.从而把计算出的每一个位置(x,y)移动到其适当的屏幕位置.在第一象限中,圆弧段从x = 0到x = y,曲线的斜率从0变化到-1.0. 因此,能够在该八分圆上的正x方向取单位步长.并使用决策參数来确定每一步两个可能的y位置中,哪一个更接近于圆的位置.然后,其它…
  Opencv内部提供了一个基于Hough变换理论的找圆算法,HoughCircle与一般的拟合圆算法比起来,各有优势:优势:HoughCircle对噪声点不怎么敏感,并且可以在同一个图中找出多个圆:反观拟合圆算法,单纯的拟合结果容易受噪声点的影响,且不支持一个输入中找多个圆缺点:原始的Hough变换找圆,计算量很大,而且如果对查找圆的半径不加控制,不但运算量巨大,而且精度也不足,在输入噪声点不多的情况下,找圆效果远不如拟合找圆:为了提高找圆精度,相比拟合法,需要提供更多的参数加以控制,参数要…