计算机图形学划线实验报告

计算机图形学划线实验报告
计算机图形学划线实验报告

《计算机图形学》实验报告

实验一直线、圆(弧)生成算法

一、实验目的及要求

1. 了解光栅图形显示器的工作原理和特点;

2. 学习C/VC环境下的基本绘图方法;

3. 实践与巩固直线的基本生成算法。

4. 掌握直线扫描转换算法的原理及实现;

5. 学习圆(弧)的基本生成算法;

6. 实践圆(弧)的基本生成算法;

7. 掌握圆弧扫描转换算法的原理及实现;

二、理论基础

1、有关直线生成算法有

DDA(数值微分)、中点画线线算法、Bresenham生成算法数值微分法先算出直线的斜率,然后从起点开始,确定最佳逼近于直线的y坐标。假设起点的坐标为整数。让x递增1,y相应递增k。

中点划线算法中若直线在x方向增加一个单位,y的增量只能在0、1之间。假设当前像素点已经确定,下一像素点就只可能有两种情况,

将这两点的中点带入直线方程中,通过中点在直线的上、下方来判断下一点的坐标。

Bresenham算法是通过各行、各列像素中心构造一组虚拟网络格线,按直线从起点到中点的顺序计算直线与各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。

2、有关画圆的算法

圆的扫描转换(中点画圆法)、Bresenham画圆算法圆的扫描转换算法同中点画线类似,将圆分为8份,先讨论圆的第一象限上半部分,从(0,R)点顺时针确定最佳逼近于该圆弧的像素序列。之后通过对称画出全部圆。

Bresenham画圆算法考虑圆在第一象限上的点,每确定一像素,则下一像素有三种可能,通过判断右下方的像素与圆的位置关系再分为三种情况,之后通过这三个点与圆的距离远近确定最佳逼近像素。

三、算法设计与分析

1、数值微分法

int x0=0,y0=0,x1=800,y1=400; //数值微分法,|k|<=1

float dx,dy,k,x,y;

dx=x1-x0;

dy=y1-y0;

k=dy/dx;

y=y0;

for(x=x0;x<=x1;x++)

{

pDC->SetPixel(x,int(y+0.5),color);

y=y+k;

}

该程序中每一步的x、y值是用前一步的值加上一个增量来获得的。在程序中y与k必须用浮点数表示,每一步都必须对y进行取整。此程序只能用于计算|k|<=1的情形,当直线的斜率的绝对值超过1是,必须把x、y的地位进行交换,y每增加一,x相应增加1/k.

2中点画线法

COLORREF color=RGB(100,25,108);

int x0=0,y0=0,x1=800,y1=400; //中点画线法,0

a=y0-y1;

b=x1-x0;

d=2*a+b;

d1=2*a;

d2=2*(a+b);

x=x0;

y=y0;

pDC->SetPixel(x, y, color);

while (x

{

if (d<0)

{

x++;

y++;

d+=d2;

}

else

{

x++;

d+=d1;

}

pDC->SetPixel (x, y, color);

}

该程序只能用于计算斜率在0、1之间的直线,从中点划线法思想计算得出的初值d0=a+0.5b为浮点型数据,由于我们只需要d的符号,而且d的增量都是整数,只是其初始值包含小数,因此,在程序中我们可以用2d代替d,来摆脱小数,

在画别的的情况斜率的直线时,将此程序中的a,b,x,y做相应的改变,具体在源程序中呈现。

当画任意起始点的直线时,只需将x0、x1、y0、y1的次序做相应的调整使之满足程序所给条件。

3、Bresenham生成算法

int x0=0,y0=0,x1=800,y1=200; //0

float k,e;

dx=x1-x0;

dy=y1-y0;

k=(float)dy/(float)dx;

e=-0.5;x=x0;y=y0;

for(i=0;i

{

pDC->SetPixel(x,y,255);

x=x+1;

e=e+k;

if(e>=0)

{

y=y+1;

e=e-1;

}

}

该程序原本要通过直线与网格交点与0.5之间的关系来判断下一像素点是取右方还是右上方(以斜率大与一为例),改进后的程序用e=d-0..5的正负判断下一像素点的取值。当e大于0即对应d>0.5的情况,给e减去1以保证在d始终在0、1之间。在画其他斜率时只需根据实际情况对该程序做一定的改动。详细见源代码中

4、中点画圆法

COLORREF color=RGB(100,25,108);

int x,y,r=200;

float d;

x=0;y=r;d=1-r;

pDC->SetPixel(x,y,color);

while(x

{

if(d<0)

{

d+=2*x+3;

x++;

}

else

{

d+=2*(x-y)+5;

x++;y--;

}

pDC->SetPixel(x+200,y+200,color);

pDC->SetPixel(x+200,-y+200,color);

pDC->SetPixel(-x+200,-y+200,color);

pDC->SetPixel(-x+200,y+200,color);

pDC->SetPixel(y+200,x+200,color);

pDC->SetPixel(y+200,-x+200,color);

pDC->SetPixel(-y+200,-x+200,color);

pDC->SetPixel(-y+200,x+200,color);

}

在画圆时用中点画圆法画出1/8圆,在描点时进行八次对称得到整个的图形。

5、Bresenham画圆算法

int r=200;

int x,y,d,d1,d2,dir;

x=0;y=r;

d=2*(1-r);

while(y>=0)

{

pDC->SetPixel(x+200,y+200,100);

pDC->SetPixel(x+200,-y+200,100);

pDC->SetPixel(-x+200,y+200,100);

pDC->SetPixel(-x+200,-y+200,100);

if(d<0)

{

d1=2*(d+y)-1;

if(d1<=0)

dir=1;

else

dir=2;

}

else if(d>0)

{

d2=2*(d-x)-1;

if(d2<=0)

dir=2;

else

dir=3;

}

else

{

dir=2;

}

switch(dir)

{

case 1 : x++;

d+=2*x+1;

break;

case 2 : x++;

y--;

d+=2*(x-y+1);

break;

case 3 : y--;

d+=(-2*y+1);

break;

}

}

在画圆时用Bresenham圆法画出1/4圆,在描点时进行八次对称得到整个的图形。

四、程序调试及结果的分析

由于画图中不能像以前的C语言一样自己输入起点和终点,于是

我将直线斜率的五中情况放在一个程序中,直接赋上多组初值以实现不同斜率的直线,所有的结果都画出来了,但是直线在水平、笔直时完全没有一点锯齿出现,在其他斜率时会产生小锯齿,这在绘成的圆中看的较为明显。这些都是由于像素点的选取所产生的误差,但这都是不可避免的。

五、实验心得及建议

第一次做计算机图形学实验,直线的生成是图形学中最基本也是最常见的图形生成,其原理与实现方法直接关系到其他复杂图形生成的效率,在之前上课中学习了直线的生成算法,并对其进行了改进。我选用的数值微分法和中点画线法进行实验,斜率在0和1之间的直线都很容易绘制,而在其他的斜率就要通过改变程序中的部分来实现。像数值微分方法在绘制斜率大于1的图形时就必须将原来程序上的x,y的地位交换,y每增加1,x相应增加1/k。在刚开始我将中点画线法和数值微分法放在同一程序中,中点画线法定义的整型变量x,y,而数值微分法需要的是浮点型的变量,之前没有注意到这一点导致数值微分法的直线画不出来,在自习检查之后才发现这一错误。之后再用Bresenham画线法画线的过程中我解决了一些课堂遗留问题,对画线方法的认识更加深刻了。另外,在画圆的过程中,我用中点画线法进行,花了1/8的圆通过对称得到整圆。起初将圆心选在(0,0)点,一直出现的是1/4圆,我没有意识到对话框里显示的只是第一象限的点,一直以为绘图方法出现了

问题。之后我将圆心移到点(200,200)得到了整个圆。第一次的实验相对比较简单,在以后的实验中要吸取教训,不犯同样的错误。

姓名院系班级学号实验日期指导教师实验成绩

计算机图形学作业

计算机图形学第一次作业 计算机X班XXX 1XXX010XXX 1.你是否想用图形学的有关知识去解决一两个实际问题?你想解决的问题是什么?考虑如何解决? 答:我希望可以解决的有设计汽车外壳和制作动画。 解决方法:(1)汽车外壳 使用3D MAX/AutoCAD软件进行设计。 (2)制作动画 利用动画制作软件(3D MAX)在计算机上制作动画 2.某彩色图形显示系统,CRT显示器的分辨率为1024×1024,它可以从2^17次方种颜色中选择出2^15次方来显示,其帧缓冲器的容量应该如何计算?查色表的长度和宽度应为多少? 解:16b==2B 因为分辨率为1024x1024 所以1024*1024*2B=2MB 3.采用Bresenham画线算法,绘出起点(1,3),终点为(9,18)的直线段。 解: void DrawBresenhamline(int x0, int y0, int x1, int y1) { int dx = x1 - x0;//x偏移量 int dy = y1 - y0;//y偏移量 int ux = dx >0 ?1:-1;//x伸展方向 int uy = dx >0 ?1:-1;//y伸展方向 int dx2 = dx <<1;//x偏移量乘2 int dy2 = dy <<1;//y偏移量乘2 if(abs(dx)>abs(dy)) {//以x为增量方向计算 int e = -dx; //e = -0.5 * 2 * dx,把e 用2 * dx* e替换 int x = x0;//起点x坐标 int y = y0;//起点y坐标 for (x = x0; x < x1;x+=ux) { printf ("%d,%d\n",x, y); e=e + dy2;//来自2*e*dx= 2*e*dx + 2dy (原来是e = e + k) if (e > 0)//e是整数且大于0时表示要取右上的点(否则是右下的点) { y += uy; e= e - dx2;//2*e*dx = 2*e*dx - 2*dx (原来是e = e -1) } } } else {//以y为增量方向计算

计算机图形学实验报告

《计算机图形学》实验报告姓名:郭子玉 学号:2012211632 班级:计算机12-2班 实验地点:逸夫楼507 实验时间:15.04.10 15.04.17

实验一 1 实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力; 编程实现DDA 算法、Bresenham 中点算法;对于给定起点和终点的直线,分别调用DDA 算法和Bresenham 中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel 等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。 2 实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One (自制平台) 3 实验结果 3.1 程序流程图 (1)DDA 算法 是 否 否 是 是 开始 计算k ,b K<=1 x=x+1;y=y+k; 绘点 x<=X1 y<=Y1 绘点 y=y+1;x=x+1/k; 结束

(2)Mid_Bresenham 算法 是 否 否 是 是 是 否 是 否 开始 计算dx,dy dx>dy D=dx-2*dy 绘点 D<0 y=y+1;D = D + 2*dx - 2*dy; x=x+1; D = D - 2*dy; x=x+1; x

3.2程序代码 //-------------------------算法实现------------------------------// //绘制像素的函数DrawPixel(x, y); (1)DDA算法 void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) { //----------请实现DDA算法------------// float k, b; float d; k = float(Y1 - Y0)/float(X1 - X0); b = float(X1*Y0 - X0*Y1)/float(X1 - X0); if(fabs(k)<= 1) { if(X0 > X1) { int temp = X0; X0 = X1; X1 = temp; }

平板边界层实验报告

流体力学实验 平板边界层实验报告 班级 姓名 实验日期 指导教师 北京航空航天大学流体力学研究所

流体力学实验 平板边界层实验报告 一、实验目的 测定平板边界层内的流速分布,并比较层流边界层及紊流边界层的速度分布的差别。 二、实验设备 本实验使用的是一个二维开路闭口低速风洞,在该风洞实验段中装有两块平板,以分别测量层流及紊流边界层的速度分布。为测量速度分布,在平板板面上安装有总压排管及静压管。这些测压管分别用橡皮管连接到多管压力计上,通过测量多管压力计液柱高度推算出速度来,具体原理见后。为测出实验段风速,在实验段侧壁上装有风速管,风速管的总压孔及静压孔也分别用橡皮管连接于多管压力计上,装备情况见图1。 图1 三、实验原理 当气流流过平板时由于粘性作用使紧贴平板表面处的流速为零,离开板面速度就逐渐增大,最后达到相当于无粘时的气流速度。对平板来说,就等于来流速度了。由于空气粘性很小,只要来流速度不是很小时,流速变化大的区域只局限在靠近板面很薄的一层气流

内,这一薄层气流通常叫作边界层。人为地规定,自板面起,沿着它的法线方向,至达到99%无粘时的速度处的距离,称为边界层厚度δ。 不可压流场中,每一点处的总压P 0,等于该点处的静压和动压 1 2 2ρv 之和。 p p v 021 2=+ ρ 则 v p p = -20() ρ (1) 因此只需测出边界层内各点处的静压p ,总压p 0,就可计算出各点的速度来。但考虑到垂直平板方向的静压梯度等于零(即??p y /=0),我们只需在平板表面开一静压孔,所测的静压就等于该点所在的平板法线方向上各点的静压。要测边界层内的速度分布就只要测出沿平板法线上各点的总压即可。 p i 0──为各测点的总压。 p i ──为各测点的静压。 v i ──为各测点的速度。 γ ──为多管压力计所使用的液体重度(公斤/米3)。 ?h i ──为各测点总压管与静压管的液柱高度差。 ρ ──为空气的密度,实验时可依据当时室温及大气压强由表查出。 φ ──为多管压力计的倾斜角。 根据(1)式,边界层内各测点处的速度为 v h i i = 2 ρ γφ?sin (2) 通常边界层内的速度分布用无量纲的形式表示为 v v f y i i 1=()δ y i 为各测点至板面的高度,δ 为边界层厚度,v 1为边界层外边界上的速度,对平板 来说即为来流速度。 v 1可通过风速管的静压管和总压管在多管压力计上的液柱高度差?h 1,由下式算出: v h 112 =ρ γφ?sin (3) 由(2)式和(3)式,可得 v v h h i i 1 1 =?? (4)

计算机图形学实验一

实验一二维基本图元的生成与填充 实验目的 1.了解并掌握二维基本图元的生成算法与填充算法。 2.实现直线生成的DDA算法、中点算法和Bresenham算法。 3.实现圆和椭圆生成的DDA和中点算法, 对几种算法的优缺点有感性认识。 二.实验内容和要求 1.选择自己熟悉的任何编程语言, 建议使用VC++。 2.创建良好的用户界面,包括菜单,参数输入区域和图形显示区域。 3.实现生成直线的DDA算法、中点算法和Bresenham算法。 4.实现圆弧生成的中点算法。 5.实现多边形生成的常用算法, 如扫描线算法,边缘填充算法。 6.实现一般连通区域的基于扫描线的种子填充算法。 7.将生成算法以菜单或按钮形式集成到用户界面上。 8.直线与圆的坐标参数可以用鼠标或键盘输入。 6. 可以实现任何情形的直线和圆的生成。 实验报告 1.用户界面的设计思想和框图。 2.各种实现算法的算法思想。 3.算法验证例子。 4.上交源程序。 直线生成程序设计的步骤如下: 为编程实现上述算法,本程序利用最基本的绘制元素(如点、直线等),绘制图形。如图1-1所示,为程序运行主界面,通过选择菜单及下拉菜单的各功能项分别完成各种对应算法的图形绘制。 图1-1 基本图形生成的程序运行界面 2.创建工程名称为“基本图形的生成”单文档应用程序框架 (1)启动VC,选择“文件”|“新建”菜单命令,并在弹出的新建对话框中单击“工程”标签。 (2)选择MFC AppWizard(exe),在“工程名称”编辑框中输入“基本图形的生成”作为工程名称,单击“确定”按钮,出现Step 1对话框。 (3)选择“单个文档”选项,单击“下一个”按钮,出现Step 2对话框。 (4)接受默认选项,单击“下一个”按钮,在出现的Step 3~Step 5对话框中,接受默认选项,单击“下一个”按钮。

计算机图形学作业-Display-答案分析

计算机图形学作业I 一.判断题 1.齐次坐标提供了坐标系变换的有效方法,但仍然无法表示无穷远的点;(×) 2.若要对某点进行比例、旋转变换,首先需要将坐标原点平移至该点,在新的坐标系下做比例或旋转变换,然后在将原点平移回去;(√) 3. 相似变换是刚体变换加上等比缩放变换;(√) 4. 保距变换是刚体变换加上镜面反射;(√) 5. 射影变换保持直线性,但不保持平行性。(√) 二、填空题 1.透视投影的视见体为截头四棱锥形状;平行投影的视见体为长方体形状。 2.字符的图形表示可以分为矢量表示和点阵表示两种形式。 3.仿射变换保持直线的平行性 4.刚体变换保持长度 5.保角变换保持向量的角度 三、单项选择题 1. 分辨率为1024×1024的显示器各需要多少字节位平面数为24的帧缓存?( D) A. 512KB; B. 1MB; C. 2MB; D. 3MB ; 2. 在透视投影中,主灭点的最多个数是( C ) A 1; B 2; C 3; D 4 3. 以下关于图形变换的论述不正确的是( B ) A. 平移变换不改变图形大小和形状,只改变图形位置; B. 拓扑关系不变的几何变换不改变图形的连接关系和平行关系; C.旋转变换后各图形部分间的线性关系和角度关系不变,变换后直线的长度不变 D.错切变换虽然可引起图形角度的改变,但不会发生图形畸变; 4. 使用下列二维图形变换矩阵:将产生变换的结果为( D ) A. 图形放大2倍; B. 图形放大2倍,同时沿X、Y1个绘图单位; C.沿X坐标轴方向各移动2个绘图单位; D.沿X坐标轴方向放大2倍,同时沿X、Y坐标轴方向各平移1个绘图单位。 5. 下列有关投影的叙述语句中,正确的论述为(B ) A. 透视投影具有近小远大的特点; B. 平行投影的投影中心到投影面距离是无限的; C. 透视投影变换中,一组平行于投影面的线的投影产生一个灭点; T =

计算机图形学实验报告 (2)

中南大学信息科学与工程学院 实验报告实验名称 实验地点科技楼四楼 实验日期2014年6月 指导教师 学生班级 学生姓名 学生学号 提交日期2014年6月

实验一Window图形编程基础 一、实验类型:验证型实验 二、实验目的 1、熟练使用实验主要开发平台VC6.0; 2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序; 3、掌握Window图形编程的基本方法; 4、学会使用基本绘图函数和Window GDI对象; 三、实验内容 创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求: 1、用户可以通过菜单选择绘图颜色; 2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形; 四、实验要求与指导 1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。 2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形 其中“曲线”项有级联菜单,包括:圆、椭圆。 3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果: 六、实验主要代码 1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this); 在OnDraw函数中添加: m_pDC=new CClientDC(this); m_pDC->MoveTo(10,10); m_pDC->LineTo(100,100); m_pDC->SetPixel(100,200,RGB(0,0,0)); m_pDC->TextOut(100,100); 2、画圆: void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC) { int dx = xb - xa; int dy = yb - ya; int Steps, k; float xIncrement,yIncrement; float x = xa,y= ya; if(abs(dx)>abs(dy))

matlab求解平板边界层问题

《粘性流体力学》程序 平板边界层问题求解

1.1编程思路 平面边界层问题可以归结为在已知边界层条件下解一个高阶微分方程,即解0 f。Matlab提供了解微分方程的方法,运用换+ff '''= 5.0 '' 元法将高阶微分方程降阶,然后运用“ode45”函数进行求解。函数其难点在于如何将边界条件中1 η运用好,由四阶龙格-库塔方 →f ,→ ' ∞ 法知其核心是换元试算匹配,故在运用函数时通过二分法实现 η是可行的。 ∞ →f ,→ ' 1 1.2m函数 function dy = rigid(x,y) dy = zeros(3,1); dy(1) = y(2); dy(2) = y(3); dy(3) = -0.5*y(1)*y(3); %main程序 [X, Y] = ode45('rigid',[0 5],[0 0 0]); plot(X, Y(:,1),'-',X, Y(:,2),'*',X, Y(:,3),'+') %二分法试算f’’的初始值以满足f’趋向无穷时的边界条件,图像上可以清晰看出f’无穷时的结果 >> [X, Y] = ode45('rigid',[0 5],[0 0 1]); plot(X, Y(:,1),'-',X, Y(:,2),'*',X, Y(:,3),'+') >> [X, Y] = ode45('rigid',[0 5],[0 0 0.5]); plot(X, Y(:,1),'-',X, Y(:,2),'*',X, Y(:,3),'+') >> [X, Y] = ode45('rigid',[0 5],[0 0 0.25]); plot(X, Y(:,1),'-',X, Y(:,2),'*',X, Y(:,3),'+') >> [X, Y] = ode45('rigid',[0 5],[0 0 0.375]); plot(X, Y(:,1),'-',X, Y(:,2),'*',X, Y(:,3),'+') >> grid on >> [X, Y] = ode45('rigid',[0 5],[0 0 0.3125]); plot(X, Y(:,1),'-',X, Y(:,2),'*',X, Y(:,3),'+') >> grid on >> [X, Y] = ode45('rigid',[0 5],[0 0 0.34375]); plot(X, Y(:,1),'-',X, Y(:,2),'*',X, Y(:,3),'+') grid on >> [X, Y] = ode45('rigid',[0 5],[0 0 0.328125]); plot(X, Y(:,1),'-',X, Y(:,2),'*',X, Y(:,3),'+') grid on

计算机图形学实验内容汇总

计算机图形学实验 肖加清

实验一图形学实验基础 一、实验目的 (1)掌握VC++绘图的一般步骤; (2)掌握OpenGL软件包的安装方法; (3)掌握OpenGL绘图的一般步骤; (4)掌握OpenGL的主要功能与基本语法。 二、实验内容 1、VC++绘图实验 (1)实验内容:以下是绘制金刚石图案。已给出VC++参考程序,但里面有部分错误,请改正,实现以下图案。 N=3 N=4

N=5 N=10 N=30

N=50 (2)参考程序 //自定义的一个类 //此代码可以放在视图类的实现文件(.cpp) 里class CP2 { public: CP2(); virtual ~CP2(); CP2(double,double); double x; double y; }; CP2::CP2() { this->x=0.0; this->y=0.0; } CP2::~CP2() { } CP2::CP2(double x0,double y0) { this->x=x0; this->y=y0; }

//视图类的一个成员函数,这个成员函数可以放在OnDraw函数里调用。 //在视图类的头文件(.h)里定义此函数 void Diamond(); //在视图类的实现文件(.cpp)里实现此函数 void CTestView::Diamond() { CP2 *P; int N; double R; R=300; N=10; P=new CP2[N]; CClientDC dc(this); CRect Rect; GetClientRect(&Rect); double theta; theta=2*PI/N; for(int i=0;i #include #include #include //定义输出窗口的大小 #define WINDOW_HEIGHT 300

计算机图形学作业-Display-答案

计算机图形学作业 I 一.判断题 1.齐次坐标提供了坐标系变换的有效方法,但仍然无法表示无穷远的点;(×) 2.若要对某点进行比例、旋转变换,首先需要将坐标原点平移至该点,在新的坐标系下做比例或旋转变换,然后在将原点平移回去;(√) 3. 相似变换是刚体变换加上等比缩放变换;(√) 4. 保距变换是刚体变换加上镜面反射;(√) 5. 射影变换保持直线性,但不保持平行性。(√) 二、填空题 1.透视投影的视见体为截头四棱锥形状;平行投影的视见体为长方体形状。 2.字符的图形表示可以分为矢量表示和点阵表示两种形式。 3.仿射变换保持直线的平行性 4.刚体变换保持长度 5.保角变换保持向量的角度 三、单项选择题 1. 分辨率为1024×1024的显示器各需要多少字节位平面数为24的帧缓存?( D) A. 512KB; B. 1MB; C. 2MB; D. 3MB ; 2. 在透视投影中,主灭点的最多个数是( C ) A 1; B 2; C 3; D 4 3. 以下关于图形变换的论述不正确的是( B ) A. 平移变换不改变图形大小和形状,只改变图形位置; B. 拓扑关系不变的几何变换不改变图形的连接关系和平行关系; C.旋转变换后各图形部分间的线性关系和角度关系不变,变换后直线的长度不变 D.错切变换虽然可引起图形角度的改变,但不会发生图形畸变; 4. 使用下列二维图形变换矩阵:将产生变换的结果为( D ) A. 图形放大2倍; B. 图形放大2倍,同时沿X、Y1个绘图单位; C.沿X坐标轴方向各移动2个绘图单位; D.沿X坐标轴方向放大2倍,同时沿X、Y坐标轴方向各平移1个绘图单位。 5. 下列有关投影的叙述语句中,正确的论述为(B ) A. 透视投影具有近小远大的特点; B. 平行投影的投影中心到投影面距离是无限的; C. 透视投影变换中,一组平行于投影面的线的投影产生一个灭点; T =

计算机图形学实验报告

目录

实验一直线的DDA算法 一、【实验目的】 1.掌握DDA算法的基本原理。 2.掌握DDA直线扫描转换算法。 3.深入了解直线扫描转换的编程思想。 二、【实验内容】 1.利用DDA的算法原理,编程实现对直线的扫描转换。 2.加强对DDA算法的理解和掌握。 三、【测试数据及其结果】 四、【实验源代码】 #include

#include #include #include GLsizei winWidth=500; GLsizei winHeight=500; void Initial(void) { glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); } void DDALine(int x0,int y0,int x1,int y1) { glColor3f(1.0,0.0,0.0); 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); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { glPointSize(3); glBegin(GL_POINTS); glV ertex2i(int(x+0.5),(int)(y+0.5)); glEnd(); x+=xIncre; y+=yIncre; } } void Display(void) { glClear(GL_COLOR_BUFFER_BIT); DDALine(100,100,200,180); glFlush(); }

流体力学平板边界层内的流速分布实验报告电子版

平板边界层内的流速分布实验 实验日期 2011-5-21 小组成员:李超,郭静文(93班)等 报告人 周楠 能动95 09031125 实验目的 1) 测量离平板前缘任意截面边界层内的速度分布; 2) 根据速度分布确定边界层厚度; 3) 了解风洞结构及测量仪器。 仪器设备 吸入式风洞、大气压强计、温度计、微压计、U 型测压管、平板模型、总压探针及三维坐标架。 其中仪器的重要参数包括: (1)吸入式低速风洞P max =P a , 工作截面尺寸300mm ×300mm; (2)风洞的气体流速u max <25m/s, M<0.3,所以风洞内气体流动可以看成二维不可压缩流动即ρ=ρa (3)平板尺寸325mm ×200mm (4)总压探针头部直径:d=0.9mm 实验原理 1 流体在大雷诺数下绕物体流动时,由于流体粘性的作用,与物体表面接触的流体速度为零,然后沿法向很快增至主流速度,这层贴近物体表面,沿着法向有很大速度梯度的流动薄层,称为边界层; 2 在边界层内,速度梯度很大,不能忽略流体的粘性,因此流动作实际流动u x 和p o 都在变化且u x

计算机图形学作业题

计算机图形学作业题 1. 计算机中由图形的形状参数(方程或分析表达式的系数,线段的端点坐标等)加属性参数(颜色、线型等)来表示图形称图形的参数表示;枚举出图形中所有的点称图形的点阵表示,简称为图像(数字图像) 2. 什么是计算机图形学?计算机图形学有哪些研究内容? 3. 计算机图形学有哪些应用领域? 4. 计算机图形学有哪些相关学科分支?它们的相互关系是怎样的? 5. 图形系统的软件系统由哪些软件组成?举例说明。 6. 了解计算机图形系统的硬件。 7. 什么是显示器的分辨率、纵横比、刷新率? 8. 什么是像素、分辨率、颜色数?分辨率、颜色数与显存的关系? 分辨率M ?N 、颜色个数K 与显存大小V 的关系: 例:分辨率为1024像素/行?768行/ 帧,每像素24位(bit )颜色(224种颜色)的显示器,所需的显存为:1024?768?24位(bit )=1024?768?24/8=2359296字节(byte )。或:每像素16777216种颜色(24位真彩色),1024?768的分辨率,所需显存为:1024?768?log 216777216位显存=2359296字节显存。 9. 什么是图元的生成?分别列举两种直线和圆扫描转换算法。 10. OpenGL 由核心库GL(Graphics Library)和实用函数库GLU(Graphics Library Utilities)两个库组成。 11. 区域填充算法要求区域是连通的,因为只有在连通区域中,才可能将种子点的颜色扩展到区域内的其它点。 区域可分为 向连通区域和 向连通区域。区域填充算法有 填充算法和 填充算法。 12. 字符生成有哪两种方式? 点阵式(bitmap fonts 点阵字——raster 光栅方法):采用逐位映射的方式得到字符的点阵和编码——字模位点阵。 笔画式(outline fonts 笔画字——stroke 方法):将字符笔画分解为线段,以线段端点坐标为字符字模的编码。 13. 图形信息包含图形的 和 。 14. 什么是图形变换?图形变换只改变图形的 不改变图形的 。图形变换包括 和 ( )。 15. 熟练掌握二维图形的齐次坐标表示、平移、比例、旋转、对称变换以及复合变换的方法和原则。 16. 图形的几何变换包括 、 、 、 、 ;图形连续作一次以上的几何变换称 变换。 17. 试写出图示多边形绕点A(xo,yo)旋转的变换矩阵。要求写出求解过程及结果。 18. 试写出针对固定参考点、任意方向的比例变换矩阵。 19. 试写出对任意直线y=mx+b 的对称变换矩阵。 20. 什么是窗口?什么是视区?什么是观察变换? 21. 简述二维观察变换的流程。 22. 试述窗口到视区的变换步骤,并推出变换矩阵。 ??—(位) —K N M V 2log ??≥

平板边界层速度剖面的测定讲义2

2009年04月20~22日平板附面层速度剖面与厚度的测定 一、实验目的: 1.熟悉附面层速度分布和厚度的测量方法。 2.具体测定平板附面层层流与湍流附面层的速度分布及其厚度。 3.把实验结果与理论计算结果进行比较,分析其差异产生的原因。 二、实验原理: 粘性匀质不可压缩流体,测量边界层内的速度,仍利用风速管(皮托管)测风速的原理,即测出某点的总压P0和静压P后再换算成该点的速度,因为边界层很薄,其厚度往往只有几mm到十几mm,因而只能用极细的探针去探测边界层内的压力。 由于在边界层内部满足?(P)/?(Y)=0,即静压P沿着平板的法线方向不变,因此,可以用壁面上的静压P来表示边界层内法线上所有不同高度的静压。于是,本实验将一根微总压管装在一标架上,使微总压管以很小的间距上下移动,测出不同高度处的总压P0(y)后,即可算出法线上离壁面y处的速度。 实验时,把总压管由壁面逐步往上移动,则测出的总压越来越大。当移动到某一高度以后,再继续往上移动几个间距,这时所测到的总压已不再随高度的变化而变化。记录下数据,经软件分析后可得速度边界层厚度和速度剖面,并与理论曲线对照。 理论分析中总是假定从平板(或物体)的前缘(或驻点)就开始形成层流或湍流边界层。实际上绕流体的运动常常是组合边界层问题,即在物体的前部分首先形成层流边界层,在它的后部分形成湍流边界层,在它们之间还有一个过渡段。 过渡段从层流的失稳点(层流不稳定点)开始直到流动成为完全湍流之点(湍流过渡点)结束。性质介于两者之间。 为了读出压力的微小变化,本实验采用压力传感器,采用总压和静压之差,将其采集的压力信号转换成电信号,再通过放大器进行信号放大后,输入A/D转换器,由计算机直接计算出速度值。 由于速度剖面是以无量纲形式画成的,因此,不需要计算一点的速度,只要计算出速度的相对值就可以了。计算各高度上的u y/v和y/δ的值,以y/δ为纵

计算机图形学实验三报告

计算机科学与通信工程学院 实验报告 课程计算机图形学 实验题目二维图形变换 学生姓名 学号 专业班级 指导教师 日期

成绩评定表

二维图形变换 1. 实验内容 完成对北极星图案的缩放、平移、旋转、对称等二维变换。 提示:首先要建好图示的北极星图案的数据模型(顶点表、边表)。另外,可重复调用“清屏”和“暂停”等函数,使整个变换过程具有动态效果。 2. 实验环境 软硬件运行环境:Windows XP 开发工具:visual studio 2008 3. 问题分析

4. 算法设计 程序框架: //DiamondView.h class CDiamondView : public CView { …… public: //参数输入和提示对话框 void Polaris();//北极星 …… }; //DiamondView.cpp void CDiamondView::OnMenuDiamond() { IsCutting = FALSE; if(dlgDiamond.DoModal()==IDOK) DrawDiamond(dlgDiamond.m_nVertex,dlgDiamond.

m_nRadius,100);//调用绘制金刚石的函数 } //北极星 void CDiamondView::Polaris() {......} 5. 源代码 //北极星 void hzbjx(CDC* pDC,long x[18],long y[18]) { CPen newPen1,*oldPen; newPen1.CreatePen(PS_SOLID,2,RGB(255,0,0)); oldPen = pDC->SelectObject(&newPen1); POINT vertex1[11]={{x[1],y[1]},{x[2],y[2]},{x[3],y[3]},{x[4],y[4]},{x[5],y[5]},{x[3],y[3]},{x[1],y[1]}, {x[6],y[6]},{x[3],y[3]},{x[7],y[7]},{x[5],y[5]}}; pDC->Polyline(vertex1, 11); newPen1.DeleteObject(); newPen1.CreatePen(PS_SOLID, 2, RGB(0,255,0)); oldPen = pDC->SelectObject(&newPen1); POINT vertex2[5]={{x[6],y[6]},{x[8],y[8]},{x[9],y[9]},{x[3],y[3]},{x[8],y[8]}}; pDC->Polyline(vertex2, 5); POINT vertex3[5]={{x[4],y[4]},{x[10],y[10]},{x[11],y[11]},{x[3],y[3]},{x[10],y[10]}}; pDC->Polyline(vertex3, 5);

计算机图形学作业题

1、已知一直线段起点(0,0),终点(8,6),利用Bresenham算法生成此直线段,写出 生成过程中坐标点及决策变量d的变化情况,并在二维坐标系中,标出直线上各点。 2、试用中点画圆算法原理推导第一象限中y=0到x=y半径为R的圆弧段的扫描转换算法。(要求写清原理、误差函数和递推公式,并进行优化) 3、如下图所示多边形,若采用扫描线算法进行填充,试写出该多边形的ET表和当扫描线Y=3时的有效边表(AET表)。 4、试按左下右上顺序用四向算法,分析当S1为种子时,下图区域的填充过程。 5、将下图中的多边形ABCD先关于点C(3,4)整体放大2倍,再绕点D(5,3)顺时针旋转90 ,试推导其变换矩阵、计算变换后的图形各顶点的坐标,并画出变换后的图形。

6、已知三角形ABC 各顶点的坐标A(3,2)、B(5,5)、C(4,5),相对直线P 1P 2(线段的坐标分别为:P 1 (-3,-2) 、P 2 (8,3) )做对称变换后到达A ’、B ’、C ’。 试计算A ’、B ’、C ’的坐标值。(要求用齐次坐标进行变换,列出变换矩阵,列出计算式子,不要求计算结果) 7、试作出下图中三维形体ABCDE 的三视图。要求写清变换过程,并画出生成的三视图。 x 8、试采用Sutherland –Cohen 裁剪算法,叙述裁剪如下图所示的直线AB 和CD 的步骤: ① 写出端点A 、B 、C 、D 的编码; ② 写出裁剪原理和直线AB 、CD 的裁剪过程。 A B C D 9 、用梁友栋算法裁减如下图线段AB ,A 、B 点的坐标分别为(3,3)、(-2,-1) 裁剪窗口为wxl=0,wxr=2,wyb=0,wyt=2。

计算机图形学实验报告

计算机图形学 实验报告 姓名:谢云飞 学号:20112497 班级:计算机科学与技术11-2班实验地点:逸夫楼507 实验时间:2014.03

实验1直线的生成 1实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析 实验数据的能力; 编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的 直线,分别调用DDA算法和Bresenham中点算法进行批量绘制,并记 录两种算法的绘制时间;利用excel等数据分析软件,将试验结果编 制成表格,并绘制折线图比较两种算法的性能。 2实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One(自制平台)。 本实验提供名为 Experiment_Frame_One的平台,该平台提供基本 绘制、设置、输入功能,学生在此基础上实现DDA算法和Mid_Bresenham 算法,并进行分析。 ?平台界面:如错误!未找到引用源。所示 ?设置:通过view->setting菜单进入,如错误!未找到引 用源。所示 ?输入:通过view->input…菜单进入.如错误!未找到引用 源。所示 ?实现算法: ◆DDA算法:void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) Mid_Bresenham法:void CExperiment_Frame_OneView::Mid_Bresenham(int X0, int Y0, int X1, int Y1)

3实验结果 3.1程序流程图 1)DDA算法流程图:开始 定义两点坐标差dx,dy,以及epsl,计数k=0,描绘点坐标x,y,x增 量xIncre,y增量yIncre ↓ 输入两点坐标x1,y1,x0,y0 ↓ dx=x1-x0,dy=y1-y0; _________↓_________ ↓↓ 若|dx|>|dy| 反之 epsl=|dx| epsl=|dy| ↓________...________↓ ↓ xIncre=dx/epsl; yIncre=dy/epsl ↓ 填充(强制整形)(x+0.5,y+0.5); ↓←←←← 横坐标x+xIncre; 纵坐标y+yIncre; ↓↑ 若k<=epsl →→→k++ ↓ 结束 2)Mid_Bresenham算法流程图开始 ↓ 定义整形dx,dy,判断值d,以及UpIncre,DownIncre,填充点x,y ↓ 输入x0,y0,x1,y1 ______↓______ ↓↓ 若x0>x1 反之 x=x1;x1=x0;x0=x; x=x0;

计算机图形学实验

实验1 直线的绘制 实验目的 1、通过实验,进一步理解和掌握DDA和Bresenham算法; 2、掌握以上算法生成直线段的基本过程; 3、通过编程,会在TC环境下完成用DDA或中点算法实现直线段的绘制。实验环境 计算机、Turbo C或其他C语言程序设计环境 实验学时 2学时,必做实验。 实验内容 用DDA算法或Besenham算法实现斜率k在0和1之间的直线段的绘制。 实验步骤 1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序; 3、编辑源程序并进行调试; 4、进行运行测试,并结合情况进行调整; 5、对运行结果进行保存与分析; 6、把源程序以文件的形式提交; 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); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { putpixel((int)(x+0.5),(int)(y+0.5),4); x+=xIncre; y+=yIncre; } } main(){ int gdriver ,gmode ;

16秋西交《计算机图形学》在线作业

奥鹏17春16秋西交《计算机图形学》在线作业 一、单选(共30 道,共60 分。) 1. 在三维造型中,不可以使用垂直扫掠造型方法构造的有( )。 A. 园柱 B. 长方体 C. 三棱锥 D. 正十二面体 标准解: 2. 在直线段的参数方程表示方法中,参数t的取值范围为( )。 A. 【0,1】 B. 【0,∞】 C. 【-1,1】 D. 【-1,0】 标准解: 3. 如果希望在CorelDRAW中创建的多个页面具有相同的图形元素,可以执行下面的哪一项操作( ) A. 先创建多个页面,然后分别在各个页面中绘制相同的图形元素 B. 创建一个页面并在此页面绘制需要的图形元素,然后再将此页面复制多个 C. 选择“Layout-Page Setup”命令,在弹出的对话框中进行设置 D. 在Master Page中创建一个图层,在此图层中绘制希望出现在各个页面中的图形元素,则此各个页面将具有相同的图形元素 标准解: 4. 下列有关平面几何投影的叙述,错误的是( )。 A. 透视投影又可分为一点透视、二点透视、三点透视 B. 斜投影又可分为等轴测、斜二测 C. 正轴测又可分为等轴测、正二测、正三测 D. 正视图又可分为主视图、侧视图、俯视图 标准解: 5. 要快速以递增的方式增大字体大小,可以利用“文本”工具选择特定的字符后,执行以下哪步操作( ) A. 按CTRL + "+"键 B. 双击“缩放”工具 C. 按CTRL + 数字小键盘上的"8" D. 按CTRL + 数字小键盘上的"2" 标准解: 6. 有M个控制顶点Pi(i=1,…k)所决定的n次B样曲线,由()段n次B样曲线段光滑连接而成。

流体力学——平板边界层编程

对于本次编程编程作业,小组运用matlab 和c++两种程序对平板边界层问题和绕过楔形体边界层流动问题进行分析研究。以下是运用matlab 解决问题的过程。 一、 平板边界层问题 该问题可以归结为在已知边界层条件下解一个高阶微分方程,即解0''5.0'''=+ff f 。Matlab 提供了解微分方程的方法,运用换元法将高阶微分方程降阶,然后运用“ode45”函数进行求解。函数其难点在于如何将边界条件中1',→∞→f η运用好,由四阶龙格-库塔方法知其核心是换元试算匹配,故在运用函数时通过二分法实现1',→∞→f η是可行的。程序如下: 第一问m 函数 function dy = rigid(t,y) dy = zeros(3,1); dy(1) = y(2); dy(2) = y(3); dy(3) = -0.5*y(1)*y(3); %第一问main 程序 [T,Y] = ode45('rigid',[0 5],[0 0 0]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+') %二分法试算f ’’的初始值以满足f ’趋向无穷时的边界条件,图像上可以清晰看出f ’无穷时的结果 >> [T,Y] = ode45('rigid',[0 5],[0 0 1]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+') >> [T,Y] = ode45('rigid',[0 5],[0 0 0.5]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+') >> [T,Y] = ode45('rigid',[0 5],[0 0 0.25]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+') >> [T,Y] = ode45('rigid',[0 5],[0 0 0.375]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+') >> grid on >> [T,Y] = ode45('rigid',[0 5],[0 0 0.3125]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+') >> grid on >> [T,Y] = ode45('rigid',[0 5],[0 0 0.34375]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+') grid on >> [T,Y] = ode45('rigid',[0 5],[0 0 0.328125]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+') grid on >> [T,Y] = ode45('rigid',[0 10],[0 0 0.328125]);%当f ’’为0.328125时,逼近结果已经很好,在0到5的变化范围内已经非常接近精确解 plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+') grid on >> [T,Y] = ode45('rigid',[0 5],[0 0 0.335975]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+') grid on

相关文档
最新文档