计算机图形学-圆的生成算法的实现

上传人:M****1 文档编号:495839365 上传时间:2022-10-13 格式:DOC 页数:7 大小:41KB
返回 下载 相关 举报
计算机图形学-圆的生成算法的实现_第1页
第1页 / 共7页
计算机图形学-圆的生成算法的实现_第2页
第2页 / 共7页
计算机图形学-圆的生成算法的实现_第3页
第3页 / 共7页
计算机图形学-圆的生成算法的实现_第4页
第4页 / 共7页
计算机图形学-圆的生成算法的实现_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《计算机图形学-圆的生成算法的实现》由会员分享,可在线阅读,更多相关《计算机图形学-圆的生成算法的实现(7页珍藏版)》请在金锄头文库上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! 实验三 圆的生成算法的实现班级 08信计2班 学号 20080502057 姓名 冯双捷 分数 一、实验目的和要求:1、掌握图形显示基本原理2、掌握使用简单函数实现画圆的方法3、熟悉圆的生成算法,及圆的绘制方法二、实验内容:1、编程实现line函数的画圆方法; 2、由矩形画出四个圆的算法实现; 3、编程实现生成圆弧的中点算法、Bresenham画圆算法三、实验结果分析. 1、line函数画圆的实现#include #include #include #include #include #define rad 0.0174532925#define

2、 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,

3、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); /

4、*画矩形 */ 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

5、-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 struct

6、int 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

7、=-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 gdrive

8、r=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

9、(%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 c

10、olor) 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); /*原

11、点坐标定位输出*/ 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)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 国内外标准规范

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号