收藏 分享(赏)

计算机图形学实验(全).doc

上传人:彼岸花开 文档编号:4026112 上传时间:2018-12-05 格式:DOC 页数:19 大小:214.50KB
下载 相关 举报
计算机图形学实验(全).doc_第1页
第1页 / 共19页
计算机图形学实验(全).doc_第2页
第2页 / 共19页
计算机图形学实验(全).doc_第3页
第3页 / 共19页
计算机图形学实验(全).doc_第4页
第4页 / 共19页
计算机图形学实验(全).doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、实验 1 直线的绘制实验目的1、通过实验,进一步理解和掌握 DDA 和 Bresenham 算法;2、掌握以上算法生成直线段的基本过程;3、通过编程,会在 TC 环境下完成用 DDA 或中点算法实现直线段的绘制。实验环境计算机、Turbo C 或其他 C 语言程序设计环境实验学时2 学时,必做实验。实验内容用 DDA 算法或 Besenham 算法实现斜率 k 在 0 和 1 之间的直线段的绘制。实验步骤1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用 C 语言编写源程序;3、编辑源程序并进行调试;4、进行运行测试,并结合情况进行调整;5、对运行结果进行保存与分析;6

2、、把源程序以文件的形式提交;7、按格式书写实验报告。实验代码:DDA:# include # include void DDALine(int x0,int y0,int x1,int y1,int color)int dx,dy,epsl,k;float x,y,xIncre,yIncre;dx=x1-x0;dy=y1-y0;x=x0;y=y0;if(abs(dx)abs(dy)epsl=abs(dx);elseepsl=abs(dy);xIncre=(float)dx/(float)epsl;yIncre=(float)dy/(float)epsl;for(k=0;k#includevoi

3、d BresenhamLine(int x0,int y0,int x1,int y1,int color)int x,y,dx,dy,e;dx=x1-x0;dy=y1-y0;e=-dx;x=x0;y=y0;while(x0)y+;e=e-2*dx;main()int gdriver ,gmode ;gdriver = DETECT;initgraph( BresenhamLine(0, 0 , 120, 200,5 ); getch ( ); closegraph ( ); 实验 2 圆和椭圆的绘制实验目的1、通过实验,进一步理解和掌握中点算法;2、掌握以上算法生成椭圆或圆的基本过程;3、通

4、过编程,会在 TC 环境下完成用中点算法实现椭圆或圆的绘制。实验环境计算机、Turbo C 或其他 C 语言程序设计环境实验学时2 学时,必做实验。实验内容用中点(Besenham)算法实现椭圆或圆的绘制。实验步骤1. 算法、原理清晰,有详细的设计步骤; 2. 依据算法、步骤或程序流程图,用 C 语言编写源程序;3. 编辑源程序并进行调试;4. 进行运行测试,并结合情况进行调整;5. 对运行结果进行保存与分析;6. 打印源程序或把源程序以文件的形式提交;7. 按格式书写实验报告。分析与思考1为何在程序运行时,有的椭圆或圆仅在屏幕左上角显示了一部分?2用中点算法生成的椭圆,为何在半径较大时,图形

5、的失真严重?实验代码:圆:#include#includevoid CirclePoint(int x,int y,int color)putpixel(x+100,y+100,color);putpixel(-x+100,y+100,color);putpixel(x+100,-y+100,color);putpixel(-x+100,-y+100,color);putpixel(y+100,x+100,color);putpixel(y+100,-x+100,color);putpixel(-y+100,x+100,color);putpixel(-y+100,-x+100,color);

6、void MidBresenhamCircle(int r,int color)int x,y,d;x=0;y=r;d=1-r;while(x0) if(d2#include#include#include#define MP 100#include#define false 0void edge_mark(int arr2,int value,int polydeflen)int by,x,y,ax,ay;int i,j;float k;by=arrpolydeflen-11;for (i=0;i=0) putpixel(x,y,value);getch();if(ayay;j-) putp

7、ixel(x+(int)(y-j)*k),j,value);else for(j=y+1;jmax)max=ari1;if (ari1xr)c=RIGHT;if(yyb)c=BOTTOM;else if(yyt)c=TOP;if(x=xl|x=xr|y=yt|y=yb)c=0;*code=c;C_S_LINECLIP(x1,y1,x2,y2,x3,y3,xl,xr,yb,yt)int x,y,code1,code2,code3,code;encode(x1,y1,encode(x2,y2,encode(x3,y3,while(code1!=0|code2!=0)if(code1code=cod

8、e1;if(code1=0)code=code2;if(LEFTy=y1+(long)(y2-y1)*(xl-x1)/(x2-x1);else if(RIGHTy=y1+(long)(y2-y1)*(xr-x1/x2-x1);else if(BOTTOMx=x1+(long)(x2-x1)*(yb-y1)/(y2-y1);else if(TOPx=x1+(long)(x2-x1)*(yt-y1)/(y2-y1);if(code=code1)x1=x;y1=y;encode(x,y,elsex2=x;y2=y;encode(x,y,while(code1!=0|code3!=0)if(code1

9、code=code1;if(code1=0)code=code3;if(LEFTy=y1+(long)(y3-y1)*(xl-x1)/(x3-x1);else if(RIGHTy=y1+(long)(y3-y1)*(xr-x1/x3-x1);else if(BOTTOMx=x1+(long)(x3-x1)*(yb-y1)/(y3-y1);else if(TOPx=x1+(long)(x3-x1)*(yt-y1)/(y3-y1);if(code=code1)x1=x;y1=y;encode(x,y,elsex3=x;y3=y;encode(x,y,while(code3!=0|code2!=0)

10、if(code3code=code3;if(code3=0)code=code2;if(LEFTy=y3+(long)(y2-y3)*(xl-x3)/(x2-x3);else if(RIGHTy=y1+(long)(y2-y3)*(xr-x3/x2-x3);else if(BOTTOMx=x1+(long)(x2-x1)*(yb-y3)/(y2-y3);else if(TOPx=x1+(long)(x2-x1)*(yt-y3)/(y2-y3);if(code=code3)x1=x;y1=y;encode(x,y,elsex2=x;y2=y;encode(x,y,setcolor(RED);li

11、ne(x1,y1,x2,y2);line(x1,y1,x3,y3);line(x2,y2,x3,y3);return;void main()int graphdriver=DETECT,graphmode;initgraph(rectangle(xl,yt,xr,yb);line(x1,y1,x2,y2);line(x1,y1,x3,y3);line(x2,y2,x3,y3);C_S_LINECLIP(x1,y1,x2,y2,x3,y3,xl,xr,yb,yt);getch();closegraph();实验截图:实验 6 曲线生成算法的实现实验目的了解曲线生成的原理,掌握几种常见的曲线生成算

12、法,利用 TurboC 实现 Bezier 曲线的生成算法。实验环境计算机、Turbo C 或其他 C 语言程序设计环境实验学时2 学时,必做实验。 实验内容(1) 了解曲线生成的原理;(2) 掌握曲线生成算法(Bezier 曲线、B 样条曲线);(3) 利用 TurboC 实现 Bezier 曲线的生成算法,在屏幕上任意绘制一条三次 Bezier 曲线。实验步骤1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用 C 语言编写源程序;3、编辑源程序并进行调试;4、进行运行测试,并结合情况进行调整;5、对运行结果进行保存与分析;6、打印源程序或把源程序以文件的形式提交;7

13、、按格式书写实验报告。实验代码:#include “graphics.h“#include “malloc.h“#include “math.h“#define MULTIPLE 7#define ROW 4struct nodefloat x,y;void draw_polygon(struct node a,int originx,int originy)int n;for (n=0;nROW;n+)if (n=0) moveto(originx+a0.x,originy-a0.y);lineto(originx+an.x,originy-an.y);struct node decaste

14、ljau(struct node p,int n,float u)int i,r;struct node point,q20;for(i=0;in;i+)qi=pi;for(r=1;rn;r+)for(i=0;in-r;i+)qi.x=(1.0-u)*qi.x+u*qi+1.x;qi.y=(1.0-u)*qi.y+u*qi+1.y;return q0;void draw_bezier_curve(struct node p,int n,int x0,int y0)int i,x,y;float u,delta;struct node point;delta=1.0/(float)(MULTIP

15、LE*ROW);for(i=0,u=0;u=1.0;i+,u=u+delta)point=decasteljau(p,n,u);if(i=0)moveto(x0+point.x,y0-point.y);lineto(x0+point.x,y0-point.y);main()int gdriver=DETECT,gmode;int number,n,originx,originy;struct node a=120,0,45,0,0,45,0,120;initgraph(originx=getmaxx()/2;originy=getmaxy()/2;setcolor(BLUE);draw_polygon(a,originx,originy);setcolor(RED);draw_bezier_curve(a,ROW,originx,originy);getch();closegraph();实验截图:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 计算机原理

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报