中点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");

scanf("%d%d", &x, &y);

printf("Please input circle radius:\n");

scanf("%d", &radius);

initgraph(&gdriver, &gmove, "");

MidBrehansemCircle(x, y, radius);

system("pause");

closegraph();

return 0;

}

void MidBrehansemCircle(int x, int y, int radius)

{

int d0 = 1-radius, di,x0=0,y0=radius;

di = d0;

while (x0<=y0)

{

putpixel(x0+x, y0+y, RED);      //45-90

putpixel(y0+y, x0+x, YELLOW);   //0-45

putpixel(x-x0, y0 + y, BLUE);   //90-135

putpixel( y- y0, x+x0, WHITE);  //135-180

putpixel( x- x0,  y- y0, RED);  //225-270

putpixel( y- y0,  x- x0, YELLOW);//180-225

putpixel(x0+x,  y- y0, BLUE);   //270-315

putpixel(y0+y,  x- x0, WHITE);  //315-360

if (di >= 0)

{

di += 2 * (x0 - y0) + 5;

y0--;

}

else

di += 2 * x0 + 3;

x0++;

}

}

时间: 2024-10-11 11:53:19

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

中点Brehensam画线算法

#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,

用中点Bresenham画直线算法绘制任意斜率直线

使用VC 6.0 mfc实现编程 刚学的图像学,挺难学的,show 代码吧 void CLineView::OnDraw(CDC* pDC) { CLineDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here int x1 ,x2 ,y1,y2 ; x1 = 0 ; y1 = 0 ;  x2 = 1000 ; y2 = 500 ; COLORREF c = RGB(25

计算机图形学中的中点画线,中点画圆,Bresenham画线与画圆算法

#include<iostream>#include<graphics.h>  // 这样引用 EasyX 图形库#include<conio.h>#include<time.h>#include<math.h>#include<stdlib.h>using namespace std; //Bresenham画线void Bresenham_line(int x0,int y0,int x1,int y1){ int x,y,dx,

《图形学》实验六:中点Bresenham算法画圆

开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画圆. 实验结果: 代码: 1 #include <gl/glut.h> 2 3 #define WIDTH 500 4 #define HEIGHT 500 5 #define OFFSET 15 6 #define R 8 7 8 void Init() //其它初始化 9 { 10 glClearColor(1.0f,1.0f,1.0f,1.0f); //设置背景颜色,完全不透明 11 glColor3f

Assignment 3 在OpenGL中使用Bresenham算法画圆

一.      任务目标 利用OpenGL,实现Bresenham算法画圆. 二.      任务要求 使用整数来确定点的位置. 标出圆心.(不太明白show的含义,于是我在圆心处画了一个点来表示.) 使用至少16个点表示一个圆. 三.      使用平台 Windows 8.1 Visual Studio 2012 四.      实现简述 与Bresenham直线算法类似,采用的是中点画圆算法. 定义圆的一个函数 可根据f(x, y)符号判断点(x, y)的位置: 于是假设点pi(xi, y

计算机图形学(二)输出图元_6_OpenGL曲线函数_2_中点画圆算法

中点画圆算法 如同光栅画线算法,我们在每个步中以单位间隔取样并确定离指定圆最近的像素位置.对于给定半径r和屏幕中心(xc,yc),可以先使用算法计算圆心在坐标原点(0, 0)的圆的像素位置,然后通过将xc加到x且yc加到y.从而把计算出的每个位置(x,y)移动到其适当的屏幕位置.在第一象限中,圆弧段从x = 0到x = y,曲线的斜率从0变化到-1.0.因此,可以在该八分圆上的正x方向取单位步长,并使用决策参数来确定每一步两个可能的y位置中,哪一个更接近于圆的位置.然后,其他七个八分圆中的位置可

中点画线法画圆

中点画线法已经在画直线的时候详细讲过了,画圆时我们也可以用这种方法.画一个圆心为坐标原点的1/4圆,然后对其进行简单几何变换,平移对称,就可以得到任意圆. 类似的用中点画线法,从(0,r)点开始,每次要么向右走,要么向右下走,直到x==y,即到达四分之一圆处: (1)当d<0时,中点在圆内,则取正右方的点,(x+1,y+0.5),此时d=d+2*x+3; (2) 当d>=0时,中点在圆外,则取右下方的点,(x+1,y-1),此时d=d+2*(x-y)+5; (3) d0=1-r,即点(0,r)

(转载)找圆算法((HoughCircles)总结与优化

Opencv内部提供了一个基于Hough变换理论的找圆算法,HoughCircle与一般的拟合圆算法比起来,各有优势:优势:HoughCircle对噪声点不怎么敏感,并且可以在同一个图中找出多个圆:反观拟合圆算法,单纯的拟合结果容易受噪声点的影响,且不支持一个输入中找多个圆缺点:原始的Hough变换找圆,计算量很大,而且如果对查找圆的半径不加控制,不但运算量巨大,而且精度也不足,在输入噪声点不多的情况下,找圆效果远不如拟合找圆:为了提高找圆精度,相比拟合法,需要提供更多的参数加以控制,参数要求比

Bresenham快速画直线算法

现在的计算机的图像的都是用像素表示的,无论是点.直线.圆或其他图形最终都会以点的形式显示.人们看到屏幕的直线只不过是模拟出来的,人眼不能分辨出来而已.那么计算机是如何画直线的呢,其实有比较多的算法,这里讲的是Bresenham的算法,是光栅化的画直线算法.直线光栅化是指用像素点来模拟直线,比如下图用蓝色的像素点来模拟红色的直线 给定两个点起点P1(x1, y1), P2(x2, y2),如何画它们直连的直线呢,即是如何得到上图所示的蓝色的点.假设直线的斜率0<k>0,直线在第一象限,Brese