计算机图形学大作业武汉理工大学.docx
《计算机图形学大作业武汉理工大学.docx》由会员分享,可在线阅读,更多相关《计算机图形学大作业武汉理工大学.docx(11页珍藏版)》请在冰豆网上搜索。
![计算机图形学大作业武汉理工大学.docx](https://file1.bdocx.com/fileroot1/2023-5/16/1510991f-c4cb-4827-91f8-ce35bda0dd8a/1510991f-c4cb-4827-91f8-ce35bda0dd8a1.gif)
计算机图形学大作业武汉理工大学
学号
成绩
《计算机图形学基础》大作业
课程名称
计算机图形学基础
开课学院
计算机科学与技术学院
指导教师姓名
学生姓名
学生专业班级
20-20学年第学期
一、命题计划
题目:
C语言图形编程
(以下题目文档要求:
①基本论述②算法③程序源代码④界面图)
二、内容与要求
(1)撰写内容
1.根据Bresenham直线绘制算法,实现直线的绘制。
2.用C语言编写:
画y=sin(x)的图形(要求画出[-2π,2π]的图形及笛卡尔坐标)
3.用C语言编写一个小圆沿着大圆运动的程序。
4.对图1中的零件图形,如何根据它所标注的尺寸,按照适当的顺序有步聚地画出该图形。
提示:
首先要分析此零件图形的几何关系,了解构成这个图形各线段的性质,才能顺利地绘出此图形。
线段(直线或圆弧)在零件图形中分为三类,即已知线段、中间线段和连接线段。
以圆弧为例,按几何原理,已知圆心的两个位置尺寸与半径尺寸便可画出圆。
因此图形中,已知这三个尺寸的圆弧称为已知圆弧,画图时应该最先画出。
凡已知其中二个尺寸的圆弧称为中间圆弧。
凡只已知一个尺寸(一般是圆弧半径)的圆弧称为连接圆弧。
中间圆弧和连接圆弧都缺省圆心的位置尺寸,它的几何位置是根据相切的条件来确定的。
因此画圆弧的顺序为:
先画已知圆弧,再画中间圆弧,最后画连接圆弧。
本零件图形是对称图形,三个小圆均匀分布在圆周中心线上,φ10,φ25,φ50和R10都是已知圆弧,R8为连接圆弧,φ50是已知圆弧的端点和R10已知圆弧的端点与连接圆弧的端点相切,从而构成整个图形。
(2)撰写要求
1.基本论述
2.算法
3.程序源代码
4.程序运行截图
5.小结
一、根据Bresenham直线绘制算法,实现直线的绘制。
1.基本论述
2.算法
3.程序源代码
#include
#include
#include
#include
voidmain()
{
intgd=DETECT,gm;//使用自检的方式
initgraph(&gd,&gm,"");//初始化图形系统
cleardevice();//清屏
intx,y;//起始点
intxe,ye;//终点
intx1=20,y1=30;
intx2=200,y2=100;
intdx=fabs(x2-x1),dy=fabs(y2-y1);
intd=2*dy-dx;
if(x1>x2)
{
x=x2;
y=y2;
xe=x1;
ye=y1;
}
else
{
x=x1;
y=y1;
xe=x2;
ye=y2;
}
moveto(x,y);
while(x{
x=x+1;
if(d<0)
d=d+2*dy;
else
{
y=y+1;
d=d+2*(dy-dx);
}
lineto(x,y);
}
getch();
closegraph();//关闭图形系统
}
4.程序运行截图
5.小结
二、用C语言编写:
画y=sin(x)的图形(要求画出[-2π,2π]的图形及笛卡尔坐标)
1.基本论述
2.算法
3.程序源代码
#include
#include
#include
#include
voidmain()
{
initgraph(600,400);
cleardevice();
floatx,y,del,d;
inta,b;
a=getmaxx()/2;
b=getmaxy()/2;
line(a,0,a-10,10);
line(a,0,a+10,10);
line(2*a,b,2*a-10,b-10);
line(2*a,b,2*a-10,b+10);
line(0,b,2*a,b);
line(a,0,a,2*b);
outtextxy(a+5,b+5,"0");
outtextxy(2*a-15,b+5,"x");
outtextxy(a+5,15,"y");
outtextxy(a+20*3.14-10,b+5,"π/2");
outtextxy(a+40*3.14-5,b+5,"π");
outtextxy(a+60*3.14-15,b+5,"3π/2");
outtextxy(a+80*3.14-10,b+5,"2π");
outtextxy(a-20*3.14-10,b+5,"-π/2");
outtextxy(a-40*3.14-10,b+5,"-π");
outtextxy(a-60*3.14-15,b+5,"-3π/2");
outtextxy(a-80*3.14-10,b+5,"-2π");
outtextxy(a-10,b-90,"1");
outtextxy(a-10,b-180,"2");
outtextxy(a-15,b+90,"-1");
d=2*3.1416;
del=0.001;
for(x=-d;x<=d;x+=del)
{
y=sin(x);
putpixel(x*40+a,-y*80+b,WHITE);
}
getch();
closegraph();
}
4.程序运行截图
5.小结
三、用C语言编写一个小圆沿着大圆运动的程序。
1.基本论述
2.算法
3.程序源代码
#include
#include
#include
#include
voidmain()
{
initgraph(800,600);
cleardevice();
floatx=0;
inta=0;
for(inti=0;1<=2000;i++)
{
for(a=0;;a++)
{
circle(a%800,300,100);
circle(a%800+100*cos(x),300+100*sin(x),30);
x+=0.01;
Sleep(20);
cleardevice();
}
}
getch();
closegraph();
}
4.程序运行截图
5.小结
四、对图1中的零件图形,如何根据它所标注的尺寸,按照适当的顺序有步聚地画出该图形。
1.基本论述
2.算法
3.程序运行截图
4.小结
5.代码
#include
#include
#include
#include
voidmain()
{
initgraph(1000,800);
cleardevice();
floatPI=3.1415926;
floatt=PI/180;
inta=400;
intb=300;
floatr=100*sqrt(3);
circle(a,b,100);
circle(a,b-r,50);
circle(a+r*cos(7*PI/6),b-r*sin(7*PI/6),50);
circle(a-r*cos(7*PI/6),b-r*sin(7*PI/6),50);
arc(a-100,b-r-100,a+100,b-r+100,0,180*t);
arc(a-200,b-200,a+200,b+200,0,60*t);
arc(a-200,b-200,a+200,b+200,120*t,180*t);
arc(a-200,b-200,a+200,b+200,240*t,300*t);
arc(a-r*cos(7*PI/6)+100,b-r*sin(7*PI/6)-100,a-r*cos(7*PI/6)-100,b-r*sin(7*PI/6)+100,240*t,60*t);
arc(a+r*cos(7*PI/6)+100,b-r*sin(7*PI/6)-100,a+r*cos(7*PI/6)-100,b-r*sin(7*PI/6)+100,120*t,300*t);
getch();
closegraph();
}
注:
程序均在VC6.0的环境下编译,由于程序调用了和,所以在vc中必须添加他们的头文件和函数库才行(这个网上是可以搜到滴),这样就和TurboC一样了。