武汉理工大学《计算机图形学》大作业

合集下载

武汉理工大学《计算机图形学》大作业

武汉理工大学《计算机图形学》大作业

《计算机图形学基础》大作业课程名称计算机图形学基础开课学院计算机科学与技术学院指导教师姓名佘名高学生姓名杨峻学生专业班级软件工程11022013-2014 学年第一学期一、命题计划题目: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.小结3.程序源代码#include<stdio.h>#include<graphics.h>void bresenhamline (int x0,int y0,int x1, int y1,int color) {int x, y, dx, dy,i;float k, e;dx = x1-x0; dy = y1- y0; k=0.7*dy/dx;e=-0.5; x=x0; y=y0;for (i=0; i<=dx; i++){ putpixel (x, y, color);x=x+1; e=e+k;if (e>= 0) { y++, e=e-1;}}}void main(){int gd = DETECT;int gm;initgraph(&gd,&gm,"");bresenhamline(130,100,200,350,YELLOW);getchar();}4.程序运行截图3.程序源代码#include "stdio.h"#include "graphics.h"#include "math.h"#include "conio.h"void drawSin(int x,int y,int A){int i = 0;line(x-300,y,x+300,y);line(x+290,y-10,x+300,y);line(x+290,y+10,x+300,y);line(x,y-200,x,y+200);line(x-10,y-190,x,y-200);line(x+10,y-190,x,y-200);for (i = -314/2 ;i<(314/2) ;i++){putpixel(x+i,(int)A * sin((double)i/25)+y,WHITE); }}void main(){int gd = DETECT;int gm;initgraph(&gd,&gm,"");drawSin(300,200,100);getch();closegraph();}4.程序运行截图3.程序源代码#include <stdio.h>#include<graphics.h>#include <math.h>void main(){int gd = DETECT;int gm;int i;float x;x=0;initgraph(&gd, &gm, "");cleardevice();for (i=0;i<=3600;i++){circle(320,240,110);circle(320+100*cos(x),240+100*sin(x),40); x=x+0.0175;Sleep(1000);cleardevice();}getchar();closegraph(); }4.程序运行截图4.程序截图:。

07101070计算机图形学结课大作业

07101070计算机图形学结课大作业

4.举例说明中点分割线段裁减算法并编程实现
4.1 算法思想:
该算法的思想是:对于每条线段 P1P2 分为 3 种情况处理。 (1)若 P1P2 完全在窗口之内,则显示该线段 P1P2,简称“取”之。 (2)若 P1P2 明显在窗口外,则丢弃该线段,简称“弃”之。 (3)若线段既不满足“取”的条件,也不满足“弃”的条件,则在交点处把线段分 为两段,其中一段完全在窗口外,可弃之,然后对另一段重复上述处理。 裁剪一条线段 P1P2 时,先求出 P1P2 所在的区号 code1,code2。若 code1=0, 且 code2=0,则线段 P1P2 在窗口内,应取之。若按位与运算 code1&code20,则 说明两个端点同在窗口的上方、下方、左方或右方,可判断线段完全在窗口外, 可弃之;否则,按第三种情况处理,求出线段与窗口某边的交点,在交点处把线 段一分为二,其中必有一段在窗口外,可弃之,再对另一段重复处理。在实现本 算法时, 不必把线段与每条窗口边界依次求交,只有按顺序检测到端点的编码不 为 0 时,才对线段与对应的窗口边界求交。
071011 班
07101070
张小山
计算机图形学 结课大作业
班级:071011 学号:07101070 姓名:张小山 时间:2014 年 1 月 6 日
1
071011 班
07101070
张小山
1.结合个人的使用体会,说说显卡主要技术指标
1.1

显示原理:


液晶是一种介于固体和液体之间的特殊物质,它是一种有机化合物,常态下呈液态,但 是它的分子排列却和固体晶体一样非常规则, 因此取名液晶, 它的另一个特殊性质在于, 如果给液晶施加一个电场,会改变它的分子排列,这时如果给它配合偏振光片,它就具 有阴止光线通过的作用(在不施加电场时,光线可以顺利透过) ,如果再配合彩色滤光 片,改变加给液晶电压大小,就能改变某一颜色透光量的多少,也可以形象地说改变液 晶两端的电压就能改变它的透光度(但实际中这必须和偏光板配合) 。 无论是笔记本电脑还是桌面系统,采用的 LCD 显示屏都是由不同部分组成的分层 结构。位于最后面的一层是由荧光物质组成的可以发射光线的背光层。背光层发 出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层。液 晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕 上的一个像素。当 LCD 中的电极产生电场时,液晶分子就会产生扭曲,从而将穿 越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出 来。 对于简单的单色 LCD 显示器, 如掌上电脑所使用的显示屏, 上述结构已经足够了。 但是对于笔记本电脑所采用的更加复杂的彩色显示器来说,还需要有专门处理彩 色显示的色彩过滤层。通常,在彩色 LCD 面板中,每一个像素都是由三个液晶单 元格构成,其中每一个单元格前面都分别有红色,绿色,或蓝色的过滤器。这样, 通过不同单元格的光线就可以在屏幕上显示出不同的颜色。现在,几乎所有的应 用于笔记本或桌面系统的 LCD 都使用薄膜晶体管( TFT )激活液晶层中的单元格。 TFT LCD 技术能够显示更加清晰,明亮的图象。早期的 LCD 由于是非主动发光器 件,速度低,效率差,对比度小,虽然能够显示清晰的文字,但是在快速显示图 象时往往会产生阴影,影响视频的显示效果,因此,如今只被应用于需要黑白显 示的掌上电脑,呼机或手机中。

《计算机图形学》试卷及答案.doc

《计算机图形学》试卷及答案.doc

一、填空题(每空0.5分,共1 0分)1、 计算机图形学中的罔形是指由点、线、而、体等 ________________ 和明喑、灰度(亮度)、色彩等 ____________________ 构成的,从现实世界中抽象出来的带齐灰度、色彩及形状的图或形。

2、 一个计算机图形系统至少应具有 ___________ 、 _____________ 、输入、输出、 __________ 等基本功能。

3、 常用的字符描述方法有:点阵式、 ______________ 和 _________________ 。

4、 字符串剪裁的策略包栝 _____________________ 、 __________________ 和笔划/像素精确度。

5、 所谓齐次坐标就是用 ____________ 维14景表示一个n 维14量。

6、 投影变换的要素有:投影对象、 ________________ 、 _______________ 、投影线和投影。

7、 输入设备在逻辑上分成定位设备、描画设备、定值设备、 _____________________ 、拾取设备和 ____________________O8、 人机交互是指用户与计算机系统之间的通信,它是人与计算机之间各种符号和动作的 ________________________ 、9、 按照光的方向不同,光源分类为: ______________ , __________________ , ______________ 。

10、 ___________________________________________________ 从视觉的角度看,颜色包含3个要素:即 _________________________________________________ 、 _______________二、单项选择题(每题2分,共30分。

请将正确答案的序号填在 题后的括号内)1、 在CRT 显示器系统中,()是控制电了束在屏幕上的运动轨迹。

武汉理工计算机图形学考试

武汉理工计算机图形学考试

1、使用glut库,编写OpenGL程序框架#include<windows.h>#include<glut.h>#include<stdio.h>#include<stdlib.h>#include<math.h>void init(void){glClearColor(1.0,1.0,1.0,0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,200.0,0.0,150.0);}void lineSegment(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,0.0,0.0);glBegin(GL_LINES);glVertex2i(180,15);glVertex2i(10,145);glEnd();glFlush()}void main(int argc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(50,100);glutInitWindowSize(400,300);glutCreateWindow("An Example OpenGL Program");init();glutDisplayFunc(lineSegment);glutMainLoop(); }二、分别用奇偶规则和非零环绕指出图1中的内部区域。

1)奇偶规则:从任意位置P作不经过顶点的射线计算射线穿过的多边形边的数目;奇数:内部点;偶数:外部点。

2)非零环绕数规则:统计多边形边以逆时针方向环绕某一特定点的次数,称为环绕数;环绕数初始为零;从位置P作不经过顶点的射线;多边形边从右至左穿过射线,加1;多边形边从左至右穿过射线,减1;其中:非零:内部点;零:外部点。

计算机图形学大作业最终版

计算机图形学大作业最终版

关于计算机艺术的发展与应用的文献综述梁文卓(08007236)【摘要】:计算机艺术是两个学科的交融。

计算机属于工科,属于自然科学。

而艺术则是思想领域范畴的,两者交汇会衍生出新的学科。

我随着科技的日益发展,计算机运算的速度和精度日益提高,随之而来的就是信息时代,而图形处理则作为信息时代的产物。

本文从计算机艺术这个主题出发,以图形处理作为切入点,论述了艺术在计算机图形处理当中的应用。

本文分两部分:第一部分为艺术的数位化现象的讨论;第二部分为计算机艺术在各个领域中的应用。

【关键字】:计算机艺术、图形处理、艺术的数位化现象随着科技的进步,计算机走近了人们的日常生活。

计算机图形处理则是其改善人们生活方式的其中一个体现。

计算机通过数码相机或者扫描仪把图形读入,然后进行平面立体化或空间立体化的处理,在计算机显示器上建立了“虚拟空间”,表现了科学技术与思想情感的有机结合。

然而,这些处理后的图形还不能称得上图形艺术,因为这些视觉图形虽然通过软件让人们产生共性和美感,但是却不具备艺术创作的本质内涵。

只有将人们的思想与计算机技巧结合起来,这样的作品才称得上是一件计算机艺术品。

第一部分:艺术的数位化现象的讨论。

在计算机艺术的这个论题上,很多学者提出了很多思辨性的结论。

翟建勇教授从哲学的角度讨论了计算机图形的美学价值。

他认为电子图像是设计的产物,表达了设计者的美学观,设计者在满足作品的用途的条件下,加入了个人的思想。

计算机图形的“个人因素”是其美学价值重要的组成部分,一副图形的美丑都不是图形的美学价值重点,关键在于它是否正确表达作者想要表达的思想。

雍晴在她的学位论文中提出了对电脑动画创作现状的思考。

她认为数码艺术中技术、艺术以及情感应该达到一种平衡的状态。

她重新定义了数码艺术的含义。

由于我国数码艺术的起步较晚,很多人对数码艺术的认识仅仅停留在计算机技术应用这样一个层面上。

她认为数码艺术虽然依赖于技术,但技术无论多么重要,它都是手段而不是目的。

计算机图形学大作业报告记录(灯光纹理映射)

计算机图形学大作业报告记录(灯光纹理映射)

计算机图形学大作业报告记录(灯光纹理映射)————————————————————————————————作者:————————————————————————————————日期:大作业报告实验课程名称:计算机图形学学生姓名:班级:学院(系):学生学号:指导教师:成绩:一、目的这次大作业是作为这学期的最后的一个考核,所以必须要用到所有的本学期学过的知识,比如怎样画出三维图形,怎样在图像上在图像上添加纹理光照,怎样使用鼠标和键盘进行人机交互等。

二、主要功能模块设计1 矩阵运算模块的设计:功能描述:程序启动后,这部分功能模块会为整个应用程序提供算法支持,具体是矩阵直接的相互运算,在2D向3D转化过程中会起到很重要的作用。

代码设计:float vv(float * v1, float * v2){return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];}void vxv(float * n, float * v1, float * v2){n[0] = v1[1] * v2[2] - v1[2] * v2[1];n[1] = v1[2] * v2[0] - v1[0] * v2[2];n[2] = v1[0] * v2[1] - v1[1] * v2[0];}void loadIdentity(Matrix m){Matrix identity = {{1.0,0.0,0.0,0.0},{0.0,1.0,0.0,0.0},{0.0,0.0,1.0,0.0},{0.0,0.0,0.0,1.0}};for(int i = 0;i < 4; i++)for(int j = 0;j < 4; j++)m[i][j] = identity[i][j];}void preMultiply(Matrix p, Matrix m){int i , j;Matrix t;for( i = 0; i < 4; i ++)for( j = 0; j < 4; j++)t[i][j] = p[i][0] * m[0][j] + p[i][1] * m[1][j] + p[i][2] * m[2][j] + p[i][3] * m[3][j];for( i = 0; i < 4; i ++)for( j = 0; j < 4; j ++)m[i][j] = t[i][j];}2 显示图形模块的设计:功能描述:该模块主要为所要画的图形进行描述,是绘制图形的主要函数,通过调用这个功能模块就能画出用于显示给用户的图形。

计算机图形学大作业文档

计算机图形学大作业文档

计算机图形学课程结课大作业学号5011110122学生姓名阿依萨丽姑丽·麦麦提专业计算机科学与技术班级计算机15-1班塔里木大学教务处制《计算机图形学》课程结课作业提示:1、请将答案写在此文档的相应位置,图形需在VC++ 6.0下客户区屏幕中心绘制,大小可以根据个人需求定制;2、请将相关的文档,包括程序的相关文档进行压缩,并将压缩文档上传到ftp://210.26.176.123“大作业电子版文档”文件夹下命名为“班级-学号-姓名”,纸质版于2014年12月19日下午18:00—20:00交到逸夫楼109。

一、选题(此题5分)请根据你抽中的题号,正确理解其所对应的简笔画。

请写出你选中的题号,将图粘贴到下方,并为其取一个合适的名字。

我选的题号是:20号图,名字为:房子。

二、组成(此题10分)请分析你所选择的题目,由哪些简单图形组成,并写出其所对应的函数或原理。

请在下方表格中简要写明函数的原型或原理的名字即可。

如果表格行数不够,请自行添加。

三、参数说明(此题15分)请写出相关函数的参数,并分析出每个参数的含义,要求此题务必写清每个函数的作用和使用方法。

画图的时候我使用了绘制直线段函数MoveTo()和LineTo()。

直线段的绘制过程中有一个称为“当前位置”的特殊位置。

每次绘制直线段都是以当前位置为起点,直线段绘制结束后,直线段的终点又成为当前位置。

由于当前位置在不断更新,所以使用LineTo()函数可以绘制连续直线。

(1)设置起点位置函数cpoint MoveTo(int x,int y);cpoint MoveTo(POINT point);参数:新位置的点坐标x和y;point是POINT结构或CPoint。

本函数只将画笔的当前位置移动到坐标x和y处,不画线。

(2)绘制直线段函数BOOL LineTo(int x,int y);BOOL LineTo(POINT point);参数:直线段终点坐标x和y;point是POINT结构或CPoint对象。

计算机图形学大作业,兔子

计算机图形学大作业,兔子
//正交投影
if(w<h)
glOrtho(-coordinatesize,coordinatesize,-coordinatesize/ratio,coordinatesize/ratio,-coordinatesize,coordinatesize);
else
glOrtho(-coordinatesize*ratio,coordinatesize*ratio,-coordinatesize,coordinatesize,-coordinatesize,coordinatesize);
//窗口大小变化时的处理函数
glutReshapeFunc(changSize);
//设置显示回调函数
glutDisplayFunc(renderScreen);
//设置按键输入处理回调函数
glutSpecialFunc(sPecialkeyFuc);
//设置全局渲染参数
setupRederingState();
}
int main(int argc, char* argv[])
{
//初始化glut
glutInit(&argc,argv);
//使用双缓冲区模式
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH);
//获取系统的宽像素
SCREEN_WIDTH=glutGet(GLUT_SCREEN_WIDTH);
GLfloat coordinatesize=100.0f;
//设置视口和窗口大小一致
glViewport(0,0,w,h);
//对投影矩阵应用随后的矩阵操作
glMatrixMode(GL_PROJECTION);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《计算机图形学基础》大作业
课程名称计算机图形学基础开课学院计算机科学与技术学院指导教师姓名佘名高
学生姓名杨峻
学生专业班级软件工程1102
2013-2014 学年第一学期
一、命题计划
题目: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.小结
3.程序源代码
#include<stdio.h>
#include<graphics.h>
void bresenhamline (int x0,int y0,int x1, int y1,int color) {
int x, y, dx, dy,i;
float k, e;
dx = x1-x0; dy = y1- y0; k=0.7*dy/dx;
e=-0.5; x=x0; y=y0;
for (i=0; i<=dx; i++)
{ putpixel (x, y, color);
x=x+1; e=e+k;
if (e>= 0) { y++, e=e-1;}
}
}
void main()
{
int gd = DETECT;
int gm;
initgraph(&gd,&gm,"");
bresenhamline(130,100,200,350,YELLOW);
getchar();
}
4.程序运行截图
3.程序源代码
#include "stdio.h"
#include "graphics.h"
#include "math.h"
#include "conio.h"
void drawSin(int x,int y,int A){
int i = 0;
line(x-300,y,x+300,y);
line(x+290,y-10,x+300,y);
line(x+290,y+10,x+300,y);
line(x,y-200,x,y+200);
line(x-10,y-190,x,y-200);
line(x+10,y-190,x,y-200);
for (i = -314/2 ;i<(314/2) ;i++)
{
putpixel(x+i,(int)A * sin((double)i/25)+y,WHITE); }
}
void main()
{
int gd = DETECT;
int gm;
initgraph(&gd,&gm,"");
drawSin(300,200,100);
getch();
closegraph();
}
4.程序运行截图
3.程序源代码
#include <stdio.h>
#include<graphics.h>
#include <math.h>
void main()
{
int gd = DETECT;
int gm;
int i;
float x;
x=0;
initgraph(&gd, &gm, "");
cleardevice();
for (i=0;i<=3600;i++)
{
circle(320,240,110);
circle(320+100*cos(x),240+100*sin(x),40); x=x+0.0175;
Sleep(1000);
cleardevice();
}
getchar();
closegraph(); }
4.程序运行截图
4.程序截图:。

相关文档
最新文档