计算机图形学-- 圆的生成算法的实现.doc_第1页
计算机图形学-- 圆的生成算法的实现.doc_第2页
计算机图形学-- 圆的生成算法的实现.doc_第3页
计算机图形学-- 圆的生成算法的实现.doc_第4页
计算机图形学-- 圆的生成算法的实现.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三 圆的生成算法的实现班级 08信计2班 学号 20080502057 姓名 冯双捷 分数 一、实验目的和要求:1、掌握图形显示基本原理2、掌握使用简单函数实现画圆的方法3、熟悉圆的生成算法,及圆的绘制方法二、实验内容:1、编程实现line函数的画圆方法; 2、由矩形画出四个圆的算法实现; 3、编程实现生成圆弧的中点算法、Bresenham画圆算法三、实验结果分析. 1、line函数画圆的实现#include #include #include #include #include #define rad 0.0174532925#define NUMBER 24main()int i,r,xx41,yy41,x0,y0;float t=360/40*3.14/180;int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,);cleardevice(); setbkcolor(RED); setcolor(YELLOW); x0=300;y0=250;r=200; for(i=0;i41;i+) xxi=x0+r*cos(i*t); yyi=y0-r*sin(i*t); for(i=0;i40;i+) line(xxi,yyi,xxi+1,yyi+1); settextstyle(1,0,3);outtextxy(300,220,C);line(300,250,500,250);getch();closegraph();return 0;运行结果见文件夹:HUAYUAN 2、由已有矩形四条边为直径画出四个圆的算法;#include #include void main() int gdrver=VGA, gmode=2; int x0=320,y0=240,r=60; initgraph(&gdrver,&gmode,); /* 图形模式驱动函数 */ cleardevice(); setcolor(2); rectangle(x0-r,y0-r,x0+r,y0+r); /*画矩形 */ circle(x0,y0-r,r); /*画圆 */ circle(x0,y0+r,r); circle(x0-r,y0,r); circle(x0+r,y0,r); getch(); /*从键盘输入任意字符 */ closegraph(); 运行结果见文件夹:HUAYUAN23. 生成圆弧的中点算法3.1算法思想为了生成圆弧,只需要计算出从x=0到x=y分段内的像素点即可,其余的像素位置利用圆的八对称性即可得出。设圆的半径是R,从初始坐标点(0,R)开始递推,假设已计算出象素P(x,y),那么,下一个与圆弧最近的像素只能是正右方的P1(x+1,y),或右下方的P2(x+1,y-1)两者之一。令M为P1和P2的中点,易知M的坐标为(x+1,y-1/2)。显然,若M在圆内,则P1离圆弧近,应取为下一个像素;否则应取P2。判断M位置的递推公式如下:3.2程序:#include Conio.h#include graphics.h#include stdio.h#include math.h#define closegr closegraph#define xo 300#define yo 250#define DELTA 1.0#define max 100/*最大顶点数*/typedef struct int x; int y;Point;typedef structint pointNum; Point *vertices; Polygon;void initgr(void) /* BGI初始化 */ int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */ registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */ initgraph(&gd, &gm, );/*控制线宽*/void putpixels(int x,int y,int color,int n) int i,j; for(i=-n/2;i=n/2;i+) for(j=-n/2;jx) if(d=0) d+=2.0*x+3; else d+=2.0*(x-y)+5; y-; x+; CirclePoints(x,y,color); main() initgr(); /* BGI初始化 */ MidPointCircle1(100,3); getch(); /* 暂停一下,看看前面绘图代码的运行结果 */ closegr(); /*恢复TEXT屏幕模式 */运行结果见文件夹:DSGDH4. Bresenham画圆算法程序:#include #include #include #includemain() int r,q,w,color; int gdriver=DETECT,gmode; /*设置图形驱动*/ int Bresenham_Ciecle(); /*定义子函数*/ printf(please input the centre of a circle x0,y0n);scanf(%d,%d,&q,&w);if(q=320|q=-320|w=250) printf(please input the centre of a circle again x0,y0n); scanf(%d,%d,&q,&w); /*输入圆心位置越界输出信息*/ printf(please input the numble of radius r=); scanf(%d,&r); if(r=500) printf(r is error,r0,please input the numble of r=);scanf(%d,&r); /*输入半径*/ printf(please input the numble of color=); scanf(%d,&color); initgraph(&gdriver,&gmode,D:TC);setcolor(color);/*设置图形颜色*/ Bresenham_Ciecle(q,w,r,color); /*绘图*/getch(); Bresenham_Ciecle(int q,int w,int r,int color) int x,y,t,v,delta,delta1,delta2,direction; char buffera20; char bufferb20;t=getmaxx()/2; v=getmaxy()/2; /*选定圆心*/ sprintf(buffera, (%d,%d), q,w); /*打印圆心坐标*/ sprintf(bufferb, (0,0) R=%d,r); /*打印原点坐标及半径*/ moveto(t,v+4); outtext(bufferb); /*圆点坐标定位输出*/q=q+t;w=v-w; moveto(q,w); outtext(buffera); /*原点坐标定位输出*/ line(1,v,2*t,v); line(t,2*v,t,1); /*画坐标*/x=q; y=r+w;line(q, w, x, y); /*画半径*/ delta=2*(1-r); while(y-w=0) putpixel(x,y,color); /*右下方1/4个圆*/ putpixel(2*q-x,y,color); /*右上方1/4个圆(从右下方1/4个圆对称复制)*/ putpixel(x,2*w-y,color); /*左下方1/4个圆(从右下方1/4个圆对称复制)*/ putpixel(2*q-x,2*w-y,color); /*左上方1/4个圆(从右下方1/4个圆对称复制)*/ if(delta0) delta1=2*(delta+y-w)-1; if(delta10) delta2=2*(delta-x+q)-1; if(delta2=0) direction=2; else direction=3; else direction=2; switch(direction) case 1: x+; delta+=2*(x-q)+1;break; case 2: x+; y-; delta+=2*(1+x-y-q+w); break;case 3: y-; delta+=-2*(y-w)+1; break; 输入圆心、半径,图形颜色数据如:运行结果见文件夹:BRESSA5.中点法与Bresenham算法的比较中点法与Bresenham算法都方便编程实现,但运行速度上Bresenham算法较快些,更适于用硬件实现。在运行程序时方便

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论