计算机图形学实验三:圆的生成算法的实现(2)

2020-04-21 01:53

实验三:圆的生成算法的实现

班级 08信计 2 学号 20080502086 姓名 分数

一、实验目的和要求

1.理解圆生成的基本原理,掌握几种常见的圆生成算法。 2.利用Visual C++ 实现圆生成的中点画圆的算法。 3.利用Visual C++ 实现圆的Bresenham算法。 4.简单了解其他算法。

二、实验内容:

1.利用中点画图算法,在屏幕上生成任意一段圆弧。 2.利用图的对称性,将(1)题生成的圆弧扩展为一个整圆。 3.利用bresebham算法设计出一段圆弧。

三、实验步骤:

1.预习教材关于圆的生成原理。

2.仿照教材关于圆生成的中点画圆算法和bresenham算法,使用C++实现该算法。 3.调试、编译、运行程序。

利用bresenham算法生成圆的代码:

#include #include #include

void BresenhemCircle(int centerx, int centery, int radius, int color, int type);

void main() {

int drive=DETECT,mode; int i,j;

initgraph(&drive,&mode,\

BresenhemCircle(300,200,100,150,0); getch(); closegraph(); }

void BresenhemCircle(int centerx, int centery, int radius, int color, int type) {

1

int x =type = 0;/*初始横坐标为原点*/ int y = radius; /*初始纵坐标远离原点*/ int delta = 2*(1-radius); int direction; while (y >= 0) {

getch();

if (!type)/*执行*/ {

/*在上半圆画两点*/

putpixel(centerx+x, centery+y, color); putpixel(centerx-x, centery+y, color); /*在下半圆画两点*/

putpixel(centerx-x, centery-y, color); putpixel(centerx+x, centery-y, color); getch(); } else {

line(centerx+x, centery+y, centerx+x, centery-y); line(centerx-x, centery+y, centerx-x, centery-y); getch(); }

if (delta < 0) {

if ((2*(delta+y)-1) < 0) direction = 1; else

direction = 2; }

else if(delta > 0) {

if ((2*(delta-x)-1) > 0) direction = 3;

2

else

direction = 2; } else

direction=2;

switch(direction) {

case 1: x++;

delta += (2*x+1); break; case 2: x++; y--;

delta += 2*(x-y+1); break; case 3: y--;

delta += (-2*y+1); break; } } }

四、实验结果分析:

Bresenham画圆算法是最有效的算法之一,通过画出八分之一的圆周,对称得到整个圆周,第一想先的图形,让X轴量平均增加,通过选择理想的Y轴坐标,确定得到整个图形,算法的实现简单,且时间复杂度较低。

3


计算机图形学实验三:圆的生成算法的实现(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:五年级数学下册青岛版《用数对表示位置(信息窗1)》参考教案2

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: