图形学实验报告

合集下载

计算机图形学实验报告4

计算机图形学实验报告4

计算机图形学实验报告4一、实验目的本次计算机图形学实验旨在深入了解和掌握计算机图形学中的一些关键概念和技术,通过实际操作和编程实现,提高对图形生成、变换、渲染等方面的理解和应用能力。

二、实验环境本次实验使用的软件环境为_____,编程语言为_____,硬件环境为_____。

三、实验内容1、二维图形的绘制使用基本的绘图函数,如直线、矩形、圆形等,绘制简单的二维图形。

通过设置线条颜色、填充颜色等属性,增强图形的表现力。

2、图形的几何变换实现图形的平移、旋转和缩放操作。

观察不同变换参数对图形的影响。

3、三维图形的生成构建简单的三维模型,如立方体、球体等。

应用光照和材质效果,使三维图形更加逼真。

四、实验步骤1、二维图形的绘制首先,在编程环境中导入所需的图形库和相关模块。

然后,定义绘图窗口的大小和坐标范围。

接下来,使用绘图函数按照指定的坐标和参数绘制直线、矩形和圆形。

最后,设置图形的颜色和填充属性,使图形更加美观。

2、图形的几何变换对于平移操作,通过修改图形顶点的坐标值来实现水平和垂直方向的移动。

对于旋转操作,根据旋转角度计算新的顶点坐标,实现图形的绕中心点旋转。

对于缩放操作,将图形的顶点坐标乘以缩放因子,达到放大或缩小图形的效果。

3、三维图形的生成首先,定义三维模型的顶点坐标和三角形面的连接关系。

然后,设置光照的位置、颜色和强度等参数。

接着,为模型添加材质属性,如颜色、反射率等。

最后,使用渲染函数将三维模型显示在屏幕上。

五、实验结果与分析1、二维图形的绘制成功绘制出了各种简单的二维图形,并且通过颜色和填充的设置,使图形具有了更好的视觉效果。

例如,绘制的矩形和圆形边缘清晰,颜色鲜艳,填充均匀。

2、图形的几何变换平移、旋转和缩放操作都能够准确地实现,并且变换效果符合预期。

在旋转操作中,发现旋转角度的正负会影响旋转的方向,而缩放因子的大小直接决定了图形的缩放程度。

3、三维图形的生成生成的三维模型具有一定的立体感和真实感。

图形学实验报告三维图形

图形学实验报告三维图形

图形学课程设计题目:三维真实感图形设计与绘制专业:计算机科学与技术学号姓名:一.一)课程设计目的与要求图形学课程设计的主要目的是让同学们通过图形学的实际问题应用,进一步增强计算机图形学理论的理解、算法应用、图形数据结构设计与图形程序设计等,从而提高图形学实际应用与软件开发能力。

二)课程设计题目三维真实感图形设计与绘制三)问题的提出与需求分析(1)题目内容说明:本题目要求应用OpenGL的光照技术和纹理技术实现一个简单的三维真实感图形的程序设计。

具体要求实现功能:1)通过对话方式实现交互式设计光照模型功能。

2)实现三维模型纹理映射功能。

3)用鼠标跟踪球方法实现三维模型的空间旋转。

(2)技术要点说明1)三维模型显示场景树:将三维可视化模型场景内容分解用一种树或表数据结构描述。

2)实现一个读Targa文件的程序:Targa是一种常见的图像格式文件,该文件通常以未压缩的格式存储图像。

3)实现鼠标跟踪球方法程序。

二.设计思路要设计一个良好的场景和优秀的交互方式,现在虚拟现实场景十分繁多,各种交互方式也五花八门,我们要选择特定的场景,场景要保证两点:一是其新鲜性,让人耳目一新,否则会让人有过于老套的感觉;另外就是其真实度,这是本次课题的着重关注点;在选取选定的场景后,我们要定义各交互方式,在从现有可得到的交互方式案例中提取和创新,以保证开发出来的交互方式可以最大程度的提高人机交互的效率。

场景的规模是必须考虑的,因为设计的时间和人员有限,必须限制场景规模,没有时间和人力去开发过大的场景规模,但是如果场景规模过小,演示系统就无法给人带来非常强烈的真实感冲击,而且过小规模的场景也会限制交互方式的设计和开发;所以定义适当的场景规模,对于课题的成败十分重要。

通过对计算机图形学和三维人机交互方式等相关书籍和文献的阅读和学习,了解和掌握建立真实图形显示系统的过程和三维虚拟场景中人机交互的方式。

三维图形及动画场景的显示,就是把所建立的三维空间模型,经过计算机的复杂处理,最终在计算机二维屏幕上显示的过程,并且在显示的过程要保证其真实感。

图形学实验报告格式

图形学实验报告格式

实验一直线、圆弧及曲线的生成算法一、实验目的1、几种直线生成算法的比较,特别掌握用Bresenham直线生成算法。

2、几种圆弧生成算法的比较,掌握Bresenham圆弧生成算法。

3、掌握用像素点法直接生成其它曲线的方法。

二、基本要求1、用不同的生成算法在屏幕上绘制出直线的图形,对不同的算法可设置不同的线形或颜色表示区别。

2、用Bresenham生成算法在屏幕上绘制出圆弧的图形,用动画的方式表演图形的生成。

三、算法提示1、有关直线生成算法有:DDA〔数值微分〕直线算法、逐点比较法、直线Bresenham 生成算法。

直线Bresenham生成算法思想如下〔第一象限,且斜率k<1的情况图2-1 a中的1a〕:1)画点〔x1,y1〕,dx=x2-x1,dy=y2-y1,计算误差初值P1=2dy-dx,i=1;2)求直线下一点位置x i+1=x i+1 如果P i>0,则y i+1=y i+1,否则y i+1=y i;3)画点〔x i+1,y i+1〕;4)求下一个误差P i+1点,如果P i>0,则P i+1=P i+2dy-2dx,否则P i+1=P i+2dy;5)i=i+1,如果i<dx+1则转步骤2,否则结束操作。

Bresenham生成算法的优点如下;1〕不必计算直线的斜率,因此不做除法。

2〕不用浮点数,只用整数。

3〕只做整数加减运算和乘2运算,而乘2运算可以用移位操作实现。

Bresenham算法的速度很快,并适于用硬件实现。

对于图2-1 a中的2a,只需将x i+1=x i+1改为x i+1=x i-1。

对于图2-1 a中的1b,斜率k>1的情况,可交换变量x和y,y每次长1个单位。

对P i 进行判断,x i+1=x i或x i+1=x i+1。

2、有关圆弧生成算法有:逐点比较法、DDA〔数值微分〕直线算法、圆的Bresenham 生成算法。

圆的生成算法一般将圆划分为8等份,只需计算(900,450)的八分之一圆弧,其它用对称法求得(参见图2-1 b)。

计算机图形学实验报告

计算机图形学实验报告

计算机图形学实验报告
实验目的:通过本次实验,深入了解并掌握计算机图形学的基本原理和相关技术,培养对图形处理的理解和能力。

实验内容:
1. 图像的基本属性
- 图像的本质及表示方法
- 像素和分辨率的概念
- 灰度图像和彩色图像的区别
2. 图像的处理技术
- 图像的采集和处理
- 图像的变换和增强
- 图像的压缩和存储
3. 计算机图形学的应用
- 图像处理在生活中的应用
- 计算机辅助设计中的图形学应用
- 三维建模和渲染技术
实验步骤和结果:
1. 在计算机图形学实验平台上加载一张测试图像,分析其像素构成
和基本属性。

2. 运用图像处理技术,对测试图像进行模糊、锐化、色彩调整等操作,观察处理后的效果并记录。

3. 学习并掌握计算机图形学中常用的处理算法,如卷积、滤波等,
尝试应用到测试图像上并进行实验验证。

4. 探讨计算机图形学在数字媒体制作、虚拟现实、计算机辅助设计
等领域的应用案例,并总结其在实践中的重要性和价值。

结论:
通过本次实验,我对计算机图形学有了更深入的了解,掌握了图像
处理技术的基本原理和应用方法。

计算机图形学作为一门重要的学科,对多个领域有着广泛的应用前景,有助于提高数字媒体技术、虚拟现
实技术等领域的发展水平。

希望在未来的学习和工作中能进一步深化
对计算机图形学理论和实践的研究,不断提升自己在这一领域的专业
能力和创新意识。

图形学实验报告

图形学实验报告

图形学实验报告图形学实验报告概述:在本次图形学实验中,我们将探索和学习计算机图形学的基本概念和技术。

通过实验,我们深入了解了图形学的原理和应用,以及如何使用计算机生成和处理图像。

实验一:像素和颜色在这个实验中,我们学习了图像是由像素组成的,每个像素都有自己的颜色值。

我们使用了Python编程语言和PIL库来创建一个简单的图像,并设置了不同的像素颜色。

通过改变像素的颜色值,我们可以创建出各种各样的图像效果。

实验二:坐标系统和变换在这个实验中,我们学习了坐标系统和图形变换。

我们使用OpenGL库来创建一个简单的二维图形,并通过平移、旋转和缩放等变换操作来改变图形的位置和形状。

这些变换操作使我们能够在屏幕上创建出各种不同的图案和效果。

实验三:线段和多边形在这个实验中,我们学习了如何使用线段和多边形来绘制图形。

我们使用了Bresenham算法来绘制直线,并学习了如何使用多边形填充算法来填充图形。

通过这些技术,我们可以创建出更加复杂和精细的图像。

实验四:光照和阴影在这个实验中,我们学习了光照和阴影的原理和应用。

我们使用了光照模型来模拟光线的传播和反射,以及计算物体的明暗效果。

通过调整光照参数和材质属性,我们可以创建出逼真的光照和阴影效果。

实验五:纹理映射和渲染在这个实验中,我们学习了纹理映射和渲染的概念和技术。

我们使用了纹理映射来将图像贴到三维物体表面,以增加物体的细节和真实感。

通过渲染技术,我们可以模拟光线的折射和反射,以及创建出逼真的材质效果。

实验六:三维建模和动画在这个实验中,我们学习了三维建模和动画的基本原理和方法。

我们使用了三维建模工具来创建三维模型,并学习了如何使用关键帧动画来实现物体的运动和变形。

通过这些技术,我们可以创建出逼真的三维场景和动画效果。

总结:通过这次图形学实验,我们深入了解了计算机图形学的原理和应用。

我们学习了像素和颜色、坐标系统和变换、线段和多边形、光照和阴影、纹理映射和渲染,以及三维建模和动画等技术。

图形学实验报告2

图形学实验报告2
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CTransformView drawing
三、实验要求:
实验前须规划程序界面和按钮的相关事件的编写代码。实验时进行代码的调试。
四、实验代码
1,图形的变换
// TransformView.cpp : implementation of the CTransformView class
//
#include "stdafx.h"
#include "Transform.h"
#include "TransformDoc.h"
#include "TransformView.h"
#include <math.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
for(i=1; i<3; i++)
{
Pt[i].x *= 0.5;
Pt[i].y *= 0.5;
}
Pt[0] = TmpPt;
Pt[1] = Pt[1] + Pt[0];
Pt[2] = Pt[2] + Pt[0];
break;
case 0X58://X的ASCII码

-图形学实验报告-二维基本变换

-图形学实验报告-二维基本变换

一、 实验目的和要求利用VC6.0编写二维基本几何变换算法的实现。

实现平移,比例,旋转等变换。

二、 算法原理介绍齐次坐标表示法就是用N+1维向量来表示一个N 维向量。

在齐次坐标系统中,点(X,Y)用(X,Y ,H)来表达,其中H 为非零的一个任意数。

点(X,Y)的标准齐次坐标表达为(X/H,Y/H,1),由于H 是一个任意非零常量,为了简便起见,我们通常取H=1。

齐次坐标系统中的点(X,Y ,1)包含有笛卡尔坐标上的点(X,Y)。

平移变换:比例变换:旋转变换:对称变换:关于x 轴对称:关于y 轴对称:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1000000y x SS ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-100010001关于原点对称:关于y=x 对称:关于y=-x 对称:错切变换:当b=0时: (x` y` 1)=(x+cy y 1)。

图形的y 坐标不变。

当c>0:图形沿+x 方向作错切位移。

ABCD →A1B1C1D1当c<0:图形沿-x 方向作错切位移。

ABCD → A2B2C2D2当c=0时, (x` y` 1)=(x bx+y 1):图形的x 坐标不变。

当b>0:图形沿+y 方向作错切位移。

ABCD → A1B1C1D1当b<0:图形沿-y 方向作错切位移。

ABCD → A2B2C2D2当b 不等于0且c 不等于0时,(x` y` 1)=(x+cy bx+y 1) :图形沿x,y 两个方向作错切位移。

∴错切变换引起图形角度关系的改变,甚至导致图形发生变形。

三、 程序核心源代码void CChangeView::Tmove(double Tx,double Ty) //平移变换矩阵{ ClearMatrix(TM);RedrawWindow();TM[0][0]=1;TM[1][1]=1;TM[2][0]=Tx;TM[2][1]=Ty;TM[2][2]=1;⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-100010001⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--100010001⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡100001010⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--100001010⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1000101c bCalculate(P,TM);AfxGetMainWnd()->SetWindowText("二维几何变换-平移变换");Draw(P,p3);}void CChangeView::Tscale(double Sx,double Sy) //比例变换矩阵{ ClearMatrix(TS);RedrawWindow();TS[0][0]=Sx;TS[1][1]=Sy;TS[2][2]=1;Calculate(P,TS);AfxGetMainWnd()->SetWindowText("二维几何变换-比例变换");Draw(P,p3);}void CChangeView::Trotate(double thta)//旋转变换矩阵{ ClearMatrix(TR);RedrawWindow();TR[0][0]=cos(thta*PI/180);TR[0][1]=sin(thta*PI/180);TR[1][0]=-sin(thta*PI/180);TR[1][1]=cos(thta*PI/180);TR[2][2]=1;Calculate(P,TR);AfxGetMainWnd()->SetWindowText("二维几何变换-旋转变换");Draw(P,p3);}void CChangeView::Treflect(double Fx,double Fy) //反射变换矩阵{ ClearMatrix(TF);RedrawWindow();TF[0][0]=Fx;TF[1][1]=Fy;TF[2][2]=1;Calculate(P,TF);AfxGetMainWnd()->SetWindowText("二维几何变换-反射变换");Draw(P,p3);}void CChangeView::Treform(double b,double c) //错切变换矩阵{ ClearMatrix(TC);RedrawWindow();TC[0][0]=1; TC[0][1]=b; TC[1][0]=c; TC[1][1]=1; TC[2][2]=1;Calculate(P,TC);AfxGetMainWnd()->SetWindowText("二维几何变换-错切变换");Draw(P,p3);}void CChangeView::OnMENUup(){// TODO: Add your command handler code hereTmove(0,10);}void CChangeView::OnMENUdown(){// TODO: Add your command handler code hereTmove(0,-10);}void CChangeView::OnMENUleft(){// TODO: Add your command handler code hereTmove(-10,0);}void CChangeView::OnMENUright(){// TODO: Add your command handler code hereTmove(10,0);}void CChangeView::OnMENUClockwise() //顺时针旋转{// TODO: Add your command handler code hereTrotate(-30);}void CChangeView::OnMENUAnticlockwise() //逆时针旋转{// TODO: Add your command handler code hereTrotate(30);}void CChangeView::OnMENUIncrease(){// TODO: Add your command handler code hereTscale(2,2);}void CChangeView::OnMENUDecrease(){// TODO: Add your command handler code here Tscale(0.5,0.5);}void CChangeView::OnMENUY(){// TODO: Add your command handler code here Treflect(-1,1);}void CChangeView::OnMENUO(){// TODO: Add your command handler code here Treflect(-1,-1);}void CChangeView::OnMENUX(){// TODO: Add your command handler code hereTreflect(1,-1);}void CChangeView::OnMENUXdirectionplus(){// TODO: Add your command handler code here Treform(0,1);}void CChangeView::OnOnMENUXdirectionneg() {// TODO: Add your command handler code here Treform(0,-1);}void CChangeView::OnMENUITYdirectionplus(){// TODO: Add your command handler code here Treform(1,0);}void CChangeView::OnMENUYdirectionneg(){// TODO: Add your command handler code here Treform(-1,0);}void CChangeView::OnMENUReset(){// TODO: Add your command handler code here if(p3==4){ KeepMatrix(OSquare,P); }if(p3==3){ KeepMatrix(OTriangle,P); }if(p3==2){ KeepMatrix(OLine,P); }Draw(P,p3);}void CChangeView::Onre(){// TODO: Add your command handler code here Treflect(-1,-1);}四、实验结果抓图原图:平移变换后:对称变换后:(关于X轴对称)旋转变换后:(顺时针旋转)比例变换后:缩小放大错切变换后:Y正向五、参考文献[1]赵建忠,段康廉.三维建模在虚拟矿山系统中的应用[J].中国科技论文.[2]许惠平,陈越,陈华根,廖晓留,王智博.青藏高原亚东-格尔木地学断面域岩石圈结构演化虚拟现实表达[J].中国科技论文.[3]罗斌,魏世民,黄昔光,张艳.基于OpenGL的3P-6SS并联机构的仿真与轨迹规划研究[J].;国家自然科学基金资助项目.。

计算机图形学实验报告

计算机图形学实验报告

实验结果与结论
• 在本次实验中,我们成功地实现了复杂场景的渲染,得到了具有较高真实感和视觉效果的图像。通过对比 实验前后的效果,我们发现光线追踪和着色器的运用对于提高渲染质量和效率具有重要作用。同时,我们 也发现场景图的构建和渲染脚本的编写对于实现复杂场景的渲染至关重要。此次实验不仅提高了我们对计 算机图形学原理的理解和实践能力,也为我们后续深入研究渲染引擎的实现提供了宝贵经验。
2. 通过属性设置和变换操作,实现了对图形的定 制和调整,加深了对图形属性的理解。
4. 实验的不足之处:由于时间限制,实验只涉及 了基本图形的绘制和变换,未涉及更复杂的图形 处理算法和技术,如光照、纹理映射等。需要在 后续实验中进一步学习和探索。
02
实验二:实现动画效果
实验目的
掌握动画的基本原 理和实现方法
04
实验四:渲染复杂场景
实验目的
掌握渲染复杂场景的基本流程和方法 理解光线追踪和着色器在渲染过程中的作用
熟悉渲染引擎的实现原理和技巧 提高解决实际问题的能力
实验步骤
• 准备场景文件 • 使用3D建模软件(如Blender)创建或导入场景模型,导出为常用的3D格式(如.obj或.fbx)。 • 导入场景文件 • 在渲染引擎(如Unity或Unreal Engine)中导入准备好的场景文件。 • 构建场景图 • 根据场景的层次结构和光照需求,构建场景图(Scene Graph)。 • 设置光照和材质属性 • 为场景中的物体设置光照和材质属性(如漫反射、镜面反射、透明度等)。 • 编写渲染脚本 • 使用编程语言(如C或JavaScript)编写渲染脚本,控制场景中物体的渲染顺序和逻辑。 • 运行渲染程序 • 运行渲染程序,观察渲染结果。根据效果调整光照、材质和渲染逻辑。 • 导出渲染图像 • 将渲染结果导出为图像文件(如JPEG或PNG),进行后续分析和展示。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

山东建筑大学测绘地理信息学院实验报告(2016—2017学年第一学期)课程:计算机图形学专业:地理信息科学班级:地信141学生姓名:王俊凝学号:20140113010指实验一直线生成算法设计一、实验目的掌握基本图形元素直线的生成算法,利用编程语言C分别实现直线和圆的绘制算法。

二、实验任务在TurboC环境下开发出绘制直线和圆的程序。

三、实验仪器设备计算机。

四、实验方法与步骤1 运行TurboC编程环境。

2 编写Bresenham直线绘制算法的函数并进行测试。

3 编写中点圆绘制算法的函数并进行测试。

4 增加函数参数,实现直线颜色的设置。

提示:1. 编程时可分别针对直线和圆的绘制算法,设计相应的函数,例如void drawline(…)和void drawcircle(…),直线的两个端点可作为drawline的参数,圆的圆心和半径可作为drawcircle的参数。

2. 使用C语言编写一个结构体类型用来表示一个点,结构体由两个成员构成,x和y。

这样,在向函数传入参数时,可使用两个点类型来传参。

定义方法为:typedef struct{int x;int y;}pt2;此处,pt2就是定义的一个新的结构体数据类型,之后就可用pt2来定义其他变量,具体用法见程序模板。

3. 在main函数中,分别调用以上函数,并传入不同的参数,实现对直线的绘制。

4. 线的颜色也可作为参数传入,参数可采用TurboC语言中的预设颜色值,具体参见TurboC图形函数。

五、注意事项1 代码要求正确运行,直线和圆的位置应当为参数,实现可配置。

2 程序提交.c源文件,函数前和关键代码中增加注释。

程序模板#include <stdio.h>#include <graphics.h>typedef struct{int x;int y;}pt2;/*declare your drawing functions.*/void drawline(pt2 startpt,pt2 endpt,int color);void drawcircle(pt2 centerpt,int radius,int color);void circlePlotPoints(pt2 centerpt,int x,int y,int color);int main(){int color,radius;pt2 startpt,endpt,centerpt;/*initialize graphics driver.*/int gdriver=VGA;int gmode=VGAHI;initgraph(&gdriver, &gmode, "C:\\TC20\\BGI");/*start drawing.*/printf("Press enter to start drawing.");getchar();/*invoke your drawing functions one by one.*/ startpt.x=10;startpt.y=10;endpt.x=300;endpt.y=250;color=4;drawline(startpt,endpt,color);centerpt.x=200;centerpt.y=180;radius=145;color=8;drawcircle(centerpt,radius,color);/*end drawing.*/printf("Drawing is done, press enter to exit."); getchar();/*close graphics driver.*/closegraph();}/** draw line* startpt: the start point of the line* endpt: the end point of the line* color: the color of the line*/void drawline(pt2 startpt,pt2 endpt,int color){int dx=abs(startpt.x-endpt.x), dy=abs(startpt.y-endpt.y);int p=2*dy-dx;int twoDy=2*dy,twoDyDx=2*(dy-dx);int x,y,xEnd;if(startpt.x>endpt.x){x=endpt.x;y=endpt.y;xEnd=startpt.x;}else{x=startpt.x;y=startpt.y;xEnd=endpt.x;}putpixel(x,y,color);while(x<xEnd){x++;if(p<0)p+=twoDy;else{y++;p+=twoDyDx;}putpixel(x,y,color);}}/** draw circle* centerpt: the center of the circle* radius: the radius of the circle* color: the color of the circle*/void drawcircle(pt2 centerpt,int radius,int color) {int x=0;int y=radius;int p=1-radius;circlePlotPoints(centerpt,x,y,color);while(x<y){x++;if(p<0)p+=2*x+1;else{y--;p+=2*(x-y)+1;}circlePlotPoints(centerpt,x,y,color);}}void circlePlotPoints(pt2 centerpt,int x,int y,int color) {putpixel(centerpt.x+x,centerpt.y+y,color);putpixel(centerpt.x-x,centerpt.y+y,color);putpixel(centerpt.x+x,centerpt.y-y,color);putpixel(centerpt.x-x,centerpt.y-y,color);putpixel(centerpt.x+y,centerpt.y+x,color);putpixel(centerpt.x-y,centerpt.y+x,color);putpixel(centerpt.x+y,centerpt.y-x,color);putpixel(centerpt.x-y,centerpt.y-x,color);}运行结果实验二多边形区域填充算法设计一、实验目的掌握多边形图形元素的填充算法,利用编程语言C实现多边形的区域填充算法。

二、实验任务在TurboC环境下开发出多边形区域填充的程序。

三、实验仪器设备计算机。

四、实验方法与步骤1 运行TurboC编程环境。

2 编写基于四连通区域的种子填充算法。

3 编写基于八连通区域的种子填充算法。

4 对填充函数进行测试。

提示:1. 编程中需要使用数据结构中的栈,可利用C语言线编写一个对应的数据结构,然后在填充函数中进行使用。

以下过程是对四连通区域填充过程的分解,可作为算法实现的参考。

2. 可将两种填充算法分别设计一个函数,例如RegionFill4(…)、RegionFill8(…),函数中间是作为参数输入的区域。

3. 区域的表示可以采用一维数组形式,数组类型是点类型(实验一中定义的结构体),依次将构成多边形的每个顶点的坐标创建点变量,并保存到一个一维数组中进行参数传递。

4. 在main函数中来生成一定的区域,并生成表示区域的一维数组,然后通过调用填充算法函数,完成区域填充。

#include <stdio.h>#include <graphics.h>void boundaryFill4(int x,int y,int fill,int boundary){int current;current=getpixel(x,y);if((current!=boundary)&&(current!=fill)){putpixel(x,y,fill);boundaryFill4(x+1,y,fill,boundary);boundaryFill4(x-1,y,fill,boundary);boundaryFill4(x,y+1,fill,boundary);boundaryFill4(x,y-1,fill,boundary);}}int main(){/*initialize graphics driver.*/int gdriver=VGA;int gmode=VGAHI;initgraph(&gdriver, &gmode, "C:\\TC20\\BGI");moveto(0,0);lineto(120,100);lineto(50,80);lineto(0,0);boundaryFill4(50,78,2,15);/*end drawing.*/printf("Drawing is done, press enter to exit.");getchar();/*close graphics driver.*/closegraph();}运行结果五、注意事项1 代码要求正确运行,填充颜色设置为函数的参数,实现可配置。

2 程序提交.c源文件,函数前和关键代码中增加注释。

实验三图形变换算法设计一、实验目的掌握图形变换的类型和算法,利用编程语言C,实现二维图形的平移、缩放、旋转和仿射变换算法。

二、实验任务在TurboC环境下开发出二维图形的平移、缩放、旋转和仿射变换算法。

三、实验仪器设备计算机。

四、实验方法与步骤1 运行TurboC编程环境。

2 编写二维图形的平移算法。

3 编写二维图形的固定缩放算法。

4 编写二维图形的固定点旋转算法。

5 编写二维图形的固定点缩放算法。

6 编写二维图形的复合变换算法,实现图形的平移、旋转和缩放算法。

7 编写二维图形的仿射变换算法。

提示:1. 针对每种变换算法,编写一个函数,并设计相应的参数。

参数可以使用实验一编写的点类型来构造。

2. 为更好地体现变换效果,在试验一编写的直线绘制算法基础上,再编写一个绘制多边形的算法函数,该函数只是将传入的多边形顶点依次进行直线绘制即可完成。

2. 在main函数中,通过组合调用以上函数,实现对二维多边形图形的几何变换。

相关文档
最新文档