已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一、中点画直线算法#include #include void MidpointLine1(int x0,int y0,int x1, int y1,int color) int a, b, d1, d2, d, x, y;a=y0-y1; b=x1-x0; d=2*a+b;d1=2*a ; d2=2* (a+b);x=x0; y=y0;putpixel(x, y, color);while (xx1) if (d0) x+; y+; d+=d2; elsex+; d+=d1;putpixel (x, y, color); void MidpointLine2(int x0,int y0,int x1, int y1,int color) int a, b, d1, d2, d, x, y;a=y0-y1; b=x1-x0; d=2*a-b;d1=2*a ; d2=2* (a-b);x=x0; y=y0;putpixel(x, y, color);while (xx1)if (d0) x+; d+=d1; elsex+;y-; d+=d2; putpixel (x, y, color); void MidpointLine3(int x0,int y0,int x1, int y1,int color) int a, b, d1, d2, d, x, y;a=y0-y1; b=x1-x0; d=a+2*b;d1=2*b ; d2=2* (a+b);x=x0; y=y0;putpixel(x, y, color);while (xx1)if (d0) y+; d+=d1; else x+; y+; d+=d2; putpixel (x, y, color); void MidpointLine4(int x0,int y0,int x1, int y1,int color) int a, b, d1, d2, d, x, y;a=y0-y1; b=x1-x0; d=a-2*b;d1=-2*b ; d2=2* (a-b);x=x0; y=y0;putpixel(x, y, color);while (xx1)if (d0) x+;y-; d+=d2; else y-; d+=d1; putpixel (x, y, color); /当输入两端点的x坐标相同时,斜率为无穷大,调用以下函数画线LineV(int x,int y0,int y1,int color) int y,t;if(y1y0)t=y0;y0=y1;y1=t;for(y=y0;y=y1;y+)putpixel(x,y,color); main() int x0,y0,x1,y1,t;float k;int gdriver = DETECT , gmode ;scanf(%d%d%d%d,&x0,&y0,&x1,&y1);initgraph ( &gdriver , &gmode ,“c:tcbgi) ;if(x0=x1) LineV(x0,y0,y1,WHITE);elseif(x1=0&k1)MidpointLine1(x0,y0,x1,y1,WHITE);else if(k=-1)MidpointLine2(x0,y0,x1,y1,WHITE);else if(k1)MidpointLine3(x0,y0,x1,y1,WHITE);else MidpointLine4(x0,y0,x1,y1,WHITE); getch();closegraph ( ) ; 二、中点画圆#include #include void Midpoint_circle(r,color)int r,color;int x,y,deltax,deltay,e;x=0; y=r; e=1-r;deltax=3;deltay=2-r-r;putpixel(x,y,color);while(xy)if(e0)e+=deltax;deltax+=2;x+; elsee+=(deltax+deltay);deltax+=2;deltay+=2;x+; y-;putpixel(x+320,y+240,color);putpixel(-x+320,y+240,color);putpixel(x+320,-y+240,color);putpixel(-x+320,-y+240,color);putpixel(y+320,x+240,color);putpixel(-y+320,x+240,color);putpixel(y+320,-x+240,color);putpixel(-y+320,-x+240,color); int main()int r0,color;int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,C:tcBGI);scanf(%d,%d,&r0,&color);Midpoint_circle(r0,color);getch(); closegraph();return 0; 三、区域填充算法#include #include int edge_MarkFill(int n,int *p,int color)int insideFlag=0,c1=0,c2=0;int max,min;int x,y,i,j;max=min=p1;for(i=1,max=min=p1;in*2;i+=2) if(maxpi) min=pi; for(y=min+1;ymax;+y)for(x=0;x640;+x) c1=c2;c2=getpixel(x,y);if(c1=color&c2!=color)insideFlag=!insideFlag;if(insideFlag)putpixel(x,y,color); int main()int gdriver=DETECT,gmode,color=RED;int points=120,50,120,200,250,200,350,50,120,50;initgraph(&gdriver,&gmode,C:TCBGI);setbkcolor(BLACK);setcolor(color);drawpoly(5,points);edge_MarkFill(5,points,color);getch();closegraph();return 0; 4、 图形裁剪算法#include#define LEFT 1#define RIGHT 2#define BOTTOM 4#define TOP 8void encode(float x,float y,int* code,float XL,float XR,float YB,float YT)int c=0;if(xXR)c=c|RIGHT;if(yYT)c=c|TOP;*code=c;return; void SwapPoint(x1,y1,x2,y2)float *x1,*y1,*x2,*y2;float t;t=*x1; *x1=*x2; *x2=t;t=*y1; *y1=*y2; *y2=t; void SwapCode(code1,code2)int *code1,*code2;int t;t=*code1;*code1=*code2;*code2=t; C_S_Line_Clip(x1,y1,x2,y2,XL,XR,YB,YT)float x1,y1,x2,y2,XL,XR,YB,YT;int code1,code2,code;int x,y;encode(x1,y1,&code1,XL,XR,YB,YT);encode(x2,y2,&code2,XL,XR,YB,YT);while(code1!=0 | code2!=0)if(code1&code2!=0)return;if(code1=0) SwapPoint(&x1,&y1,&x1,&y2); SwapCode(&code1,&code2); code=code1;if(LEFT&code!=0)x=XL;y=y1+(y2-y1)*(XL-x1)/(x2-x1); else if(RIGHT&code!=0)x=XR;y=y1+(y2-y1)*(XR-x1)/(x2-x1); else if(BOTTOM&code!=0)y=YB;x=x1+(x2-x1)*(YB-y1)/(y2-y1); else if(TOP&code!=0)y=YT;x=x1+(x2-x1)*(YT-y1)/(y2-y1); x1=x;y1=y;encode(x,y,code,XL,XR,YB,YT);line(x1,x2,y1,y2);return; int main()int x1=12,x2=560,y1=202,y2=25;int XL=35,XR=358,YB=62,YT=310;int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,C:TCBGI);C_S_Line_Clip(x1,y1,x2,y2,XL,XR,YB,YT);getch();closegraph();return 0; 五、bezier曲线生成算法:de Casteljau算法#include#include#define N 4float Casteljau( int k, float controls10, float t)int r,i;float t1,controlsa10;t1=1.0-t;for(i=0;i=k;i+) controlsai=controlsi;for(r=1;r=k;r+)for(i=0;i=k-r;i+) controlsai=t1*controlsai+t*controlsai+1;return controlsa0; void draw_bezier_curve(int k,float controlx,float controly,int x0,int y0) int i,x,y; float u,delta; float controlp; delta=1.0/(float)(N); for(i=0,u=0;u=1.0;i+,u=u+delta) controlp=Casteljau(k,controlxi,u); if(i=0) moveto(x0+controlp,y0-controlp); lineto(x0+controlp,y0-controlp); void draw_polygon(float controlx,float controly,int originx,int originy) int i; for (i=0;iN;i+) if (i=0) moveto(originx+controlx0,originy-controly0); lineto(originx+controlxi,originy-controlyi); int main()float controlsx5,controlsy5;int gdriver=DETECT,gmode; int originx,originy; printf(input x0,y0,x1,y1,x2,y2,x3,y3,x4,y4:);scanf(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,&controlsx0,&controlsy0,&controlsx1,&controlsy1,&controlsx2,&controlsy2,&controlsx3,&controlsy3,&controlsx4,&controlsy4);initgraph(&gdriver,&gmode,C:TCBGI); originx=getmaxx()/2; originy=getmaxy()/2; setcolor(BLUE);draw_polygon(controlsx,controlsy,originx,originy); setcolor(RED);draw_bezier_curve(N,controlsx,controlsy,originx,originy); getch(); closegraph(); 6、二维几何图形变换:用户输入三角形的三个顶点以及屏幕上任意一个顶点P的坐标,使得该三角形相对于P瞬时针旋t弧度。#include#include#includefloat jzjs(float a33,float b33,float s33)int i,j,k;double sum;for(i=0;i3;+i)for(j=0;j3;+j)sum=0;for(k=0;k3;+k)sum+=aik*bkj;sij=sum; return 0; int main()int drive=DETECT,mode;float t;int i,j;float x0,y0,x1,y1,x2,y2,x3,y3;float T133=1,0,0,0,1,0,0,0,1,T233=0,0,0,0,0,0,0,0,1,T333=1,0,0,0,1,0,0,0,1,p33=0,0,1,0,0,1,0,0,1;float r33,s33,w33;initgraph(&drive,&mode,C:TCBGI);setcolor(RED);printf(please input the coordinate of P(x0,y0) and the radian(t):n);scanf(%f,%f,%f,&x0,&y0,&t);printf(please input the three points of triangle(x1,y1,x2,y2,x3,y3):n); scanf(%f,%f,%f,%f,%f,%f,&x1,&y1,&x2,&y2,&x3,&y3);line(x1,y1,x2,y2);line(x2,y2,x3,y3);line(x3,y3,x1,y1);T120 = -x0; T121 = -y0;T200 = cos(t);T201 = sin(t);T210 = -sin(t);T211 = cos(t);T320 = x0; T321 = y0;p00 = x1; p01 = y1;p10 = x2; p11 = y2;p20 = x3; p21 = y3; jzjs(T1,T2,r);jzjs(r,T3,s);jzjs(p,s,w);getch(); setcolor(GREEN); line(w00,w01,w10,w11);line(w10,w11,w20,w21);line(w20,w21,w00,w01);getch(); closegraph();return 0; 7、仿照多边形区域填充算法,写出圆域的填充算法。方法一:套用边界标志算法:#include edgeMarkFill(int x0,int y0,int r,int color) int insideFlag=0,c1=0,c2=0;int max,min;int i,j,x,y;max=y0+r;min=y0-r;for(y=min+1;ymax;y+)for(x=x0-r-1;x=x0+r;x+)c1=c2; c2=getpixel(x,y); if(c1=color&c2!=color)insideFlag=!insideFlag; if(insideFlag) putpixel(x,y,color); main ( ) int gd = DETECT , gm,color=RED;int x,y,r;scanf(%d%d%d,&x,&y,&r);initgraph ( &gd, &gm,d:turboc2) ;setbkcolor(BLUE);setcolor(color);circle(x,y,r);edgeMarkFill(x,y,r,color);getch ( ) ;closegraph (); 方法二:扫描圆弧时直接填充#include circleFill(int x0,int y0,int r, int color)int x,y,x1;float d;x=0;y=r;d=1.25-r;while(xy)for(x1=x0-x;x1=x0+x;x1+)putpixel(x1,y+y0,color);for(x1=x0-y;x1=x0+y;x1+)putpixel(x1,x+y0,color); for(x1=x0-x;x1=x0+x;x1+)putpixel(x1,-y+y0,color);for(x1=x0-y;x1=x0+y;x1+)putpixel(x1,-x+y0,color);if(d0) d+=2*x+3; x+; elsed+= 2*(x-y) + 5; x+;y-; main ( ) int gd = DETECT , gm,color=RED;int x,y,r;scanf(%d%d%d,&x,&y,&r);initgraph ( &gd, &gm,d:turboc2) ;circleFill(x,y,r,color);getch ( ) ;closegraph (); 8、编写一个程序实现绘制三个像素宽的斜率在之间的点划线。void MidpointLine(int x0,int y0,int x1, int y1,int color) int a, b, d1, d2, d, x, y;int pattern32=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,i=0;a=y0-y1; b=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内分泌科糖尿病饮食控制计划
- 房地产行业销售策划人员市场拓展与销售业绩绩效考核表
- 落叶的分类数学活动
- 2026届河北省邯郸市曲周县一中化学高三第一学期期中综合测试模拟试题含解析
- 秋分星空导览
- 夏日海滩海浪与阳光的交响曲作文11篇范文
- 旅游行业导游服务与客诉处理绩效考核表
- 客户服务体系介绍
- 电力设备维护工程师电力行业绩效考核表
- 宾馆装修设计方案
- 民办幼儿园承包经营合同的效力认定
- 工程信息编码规则-0205平台名称命名-副本
- SB/T 10752-2012马铃薯雪花全粉
- GB/T 5677-2018铸件射线照相检测
- BIM-建筑信息模型
- GA 139-2009灭火器箱
- 火力发电工程建设标准强制性条文执行表格锅炉分册
- 单位减少存档人员表
- 煤矿井下隔爆水棚安装设计说明
- 盘锦浩业芳烃抽提装置操作规程
- 人工智能在教育中的应用42页PPT课件
评论
0/150
提交评论