实验三:圆的生成算法的实现
班级 08信计 2 学号 20080502086 姓名 分数
一、实验目的和要求
1.理解圆生成的基本原理,掌握几种常见的圆生成算法。 2.利用Visual C++ 实现圆生成的中点画圆的算法。 3.利用Visual C++ 实现圆的Bresenham算法。 4.简单了解其他算法。
二、实验内容:
1.利用中点画图算法,在屏幕上生成任意一段圆弧。 2.利用图的对称性,将(1)题生成的圆弧扩展为一个整圆。 3.利用bresebham算法设计出一段圆弧。
三、实验步骤:
1.预习教材关于圆的生成原理。
2.仿照教材关于圆生成的中点画圆算法和bresenham算法,使用C++实现该算法。 3.调试、编译、运行程序。
利用bresenham算法生成圆的代码:
#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
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库计算机图形学实验三:圆的生成算法的实现(2)在线全文阅读。
相关推荐: