河南工业大学-图形学实验四

合集下载

bezier曲线或b样条曲线的绘制

bezier曲线或b样条曲线的绘制

淮阴工学院计算机科学系实验报告书课程名:《计算机图形学》题目:实验4 BEZIER曲线或B样条曲线的绘制班级:学号:姓名:评语:成绩:指导教师:批阅时间:年月日1、实验内容或题目编程实现三次BEZIER或B样条曲线的绘制。

2、实验目的与要求(1) 通过实验,进一步理解和掌握生成BEZIER或B样条曲线的算法;(2) 掌握BEZIER或B样条曲线的基本生成过程;(3) 通过编程,会在TC环境下编程实现三次BEZIER或B样条曲线的绘制。

3、实验步骤与源程序错误!未找到引用源。

实验步骤1、算法、原理清晰,有详细的设计步骤;2、依据算法、步骤或程序流程图,用C语言编写源程序;3、编辑源程序并进行调试;4、进行特殊模式的运行测试,并结合情况进行调整;5、对运行结果进行保存与分析;6、打印源程序或把源程序以文件的形式提交;7、按格式书写实验报告。

错误!未找到引用源。

源代码#include "graphics.h"float px[4]={ 50,80,120,140 };float py[4]={100,230,230,160};void Bezier(){float a0,a1,a2,a3,b0,b1,b2,b3;int k,x,y;float i,t,n=4;setcolor(15);for(k=0;k<3;k++){moveto(px[k],py[k]);lineto(px[k+1],py[k+1]);}setcolor(4);a0=px[0];a1=-3*px[0]+3*px[1];a2=3*px[0]-6*px[1]+3*px[2];a3=-px[0]+3*px[1]-3*px[2]+px[3];b0=py[0];b1=-3*py[0]+3*py[1];b2=3*py[0]-6*py[1]+3*py[2];b3=-py[0]+3*py[1]-3*py[k+2]+py[3];for(i=0;i<n;i+=0.001){t=i;x=a0+a1*t+a2*t*t+a3*t*t*t;y=b0+b1*t+b2*t*t+b3*t*t*t;if(i==0)moveto(x,y);lineto(x,y);}}void main(){int driver,mode;driver=DETECT;initgraph(&driver,&mode,"..\\bgi");Bezier();}4、测试数据与实验结果5、结果分析与实验体会通过这次实验,我初步熟悉了turboc 的运行环境。

计算机图形学实验报告4

计算机图形学实验报告4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

河南工业大学protel实验报告

河南工业大学protel实验报告

实验1 原理图设计环境画原理图实验一实验目的1 熟练PROTEL99se的原理图编辑环境2 掌握常用管理器,菜单的使用,电气规则检查3 掌握元器件等的调用,属性含义。

二实验内容教材 1.1,1.2,1.3,1.4环境熟悉2.1,2.2工具条对象,器件调用2.3,2.4 菜单使用,元件属性修改4.2练习1-练习8注意连线:从器件的端点开始到端点结束,不要多余的线按空格旋转元件;PAGEDOWN PAGEUP缩放放好原件的原理图编号报告文件编辑好属性的原理电路图实验2 原理图练习实验一实验目的1 掌握层次电路图设计方法2 了解层次电路原理图各图之间的关系3 熟悉顶层图,子图的生成方法二实验内容教材2.4.4层次电路图菜单使用参考33页(5)(6)注意1 在顶层电路图中,图纸符号(Sheet symbol)代表一张子图纸,子图是通过图纸符号入口(sheet symbol entry)与外界连接的2子图中的端口(Port)与顶层图中的图纸符号入口(sheet symbol entry)的不同。

端口(Port)是在生成子图时候自动生成的。

3 层次电路图出现多张图纸,需要修改图纸编号(number),修改方法:Design-Options-Organizations…顶层电路图Wenya分电路Zhengliu分电路图实验3 元件图绘制实验一实验目的1 掌握元件图绘制基本步骤方法2 了解多元件芯片含义3 多元元件芯片元件图的绘制及其在原理图中的调用方法4 理解元件库的作用,库的创建与修改二实验内容1教材:3.4画元件图示例2教材87页,练习9 画多元件芯片U9及其在原理图中的调用注意:库文件(*.LIB)的建立,库中可以存放多个元件元件的添加:Tools—New Component多元件芯片的子件的添加:Tools—New Part放置管脚最后的D触发器练习九电路实验4 电路板图环境实验一实验目的1 理解电路版图与原理图之间的关系2 理解网络表生成及其作用,网络表所包含的内容。

河南工业大学实验报告

河南工业大学实验报告

河南工业大学实验报告课程_ 软件应用技术_____ _实验名称___ 图形、文本和位图_院系__ 信息科学与工程学院 _专业班级___ _计科0701_姓名____ 徐晶_ _ 学号__ _ _ 20074140129_____一.实验内容编写一个应用程序,实现画线的动态定位操作,如下图所示。

当鼠标在视图客户区移动时,会出一个大大的光标(由水平线和垂直线组成),光标的右上角的小窗口显示出当前的鼠标位置,当单击鼠标左键时,在屏幕上出现由小十字点标志,此时再移动鼠标,从当前鼠标位置到前面一个点将绘制一条直线,且该直线随鼠标位置移动而变化,就像一根橡皮条一样,且光标右上角的小窗口显示出这条直线的长度和角度,再单击鼠标左键一条直线被绘制出来,…,直到按ESC键结束,一条折线就绘制出来了。

为了保证在视图需要更新时,这些线条仍然存在,需要将这些点保存下来,然后再重新绘出。

二.实验准备(1)在学习完教材第7章内容后进行本次实验(2)阅读教材中关于本次上机所需要的程序。

三.实验步骤(1),创建工作文件夹,启动VC6.0,创建一个默认的单文档应用程序Ex-A7。

(2),A,光标的生成和实现:在Ex-ATView文件中的类声明添加下列成员变量class CEx_A7View : public CView{public:BOOL m_bCursorFirst; // 光标第一次显示标志CPoint m_ptPrevPos; // 上一个点的坐标CPoint m_ptCurPos; // 当前点的坐标B,在CEx-ATView::OnDraw中添加一些清屏代码,并将m_blurSorFirst设为TRUEvoid CEx_A7View::OnDraw(CDC* pDC){CEx_A7Doc* pDoc = GetDocument();ASSERT_V ALID(pDoc);CRect rcClient;GetClientRect( rcClient ); // 获取客户区大小pDC->FillSolidRect( rcClient, RGB( 0,0,0 ) ); // 将客户区清为黑色m_bCursorFirst = TRUE;pDC->SetBkMode( TRANSPARENT ); // 设置透明背景模式}C,为CEx-ATView类添加绘制光标函数的成员函数DrawCurSorvoid CEx_A7View::DrawCursor(CDC *pDC, CPoint pt){CRect rcClip;pDC->GetClipBox( rcClip ); // 当前裁剪区大小CPen pen( PS_SOLID, 1, RGB( 128, 128, 128 ) ); // 灰色画笔CPen *oldPen = pDC->SelectObject( &pen ); // 选入画笔// 设置XOR光栅操作模式int nOldROP = pDC->SetROP2( R2_XORPEN );// 绘制水平线pDC->MoveTo( rcClip.left, pt.y );pDC->LineTo( rcClip.right, pt.y );//绘制垂直线pDC->MoveTo( pt.x, rcClip.top );pDC->LineTo( pt.x, rcClip.bottom );// 恢复原来的光栅模式pDC->SetROP2( nOldROP );// 恢复原来的画笔}D,用MFC classWizard为CEx-ATView类添加WM_MouSEMOVE消息映射,并在映射函数中添加相应代码。

计算机图形学实验报告

计算机图形学实验报告

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

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

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

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

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

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

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

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

河南工业大学-图形学实验二

河南工业大学-图形学实验二

实验二:基本图元扫描转换一、实验目的1、掌握图形扫描转换的基本概念;2、掌握直线的绘制算法及程序设计;3、掌握圆弧的绘制算法及程序设计。

二、实验要求1. 在MFC单文档应用程序中,利用MFC应用程序向导生成完整的应用程序基本框架,添加“直线”菜单,在“直线”菜单下添加“DDA画线”子菜单,如图1.1所示,对应DDA 算法绘制直线,直线端点为(100,100),(300,200),颜色为红色,如图1.2所示。

图1.1 菜单示例图图1.2 DDA画线2. 在上题基础上,在“直线”菜单下再添加一个“中点画线”子菜单,如图2.1所示,利用中点画线算法画线,实现鼠标按下抬起绘制直线段的功能,颜色为黑色,如图2.2所示。

图2.1菜单示例图图2.1绘制矩形制作动画图3. 在上题基础上,添加“圆形”菜单,如图3.1所示,利用Bresenham算法编程实现圆的扫描转换,绘制半径为200的黑色圆,如图3.2所示。

图3.1菜单示例图图3.2 Bresenham画圆三、实验内容○1“直线”菜单,“DDA画线”子菜单,“中点画线”子菜单的构建○2DDA画线void CMainFrame::OnDda(){// 获得设备指针CDC *pDC=GetDC();// 定义直线两端点和直线颜色(红色)int x0=100,y0=100,x1=300,y1=200,c=RGB(255,0,0);float x,y,i;float dx,dy,k;dx=(float)(x1-x0);dy=(float)(y1-y0);k=dy/dx;y=y0; x=x0;if(abs(k)<1){ for(;x<=x1;x++){pDC->SetPixel(x,int(y+0.5),c);y=y+k;}}if(abs(k)>=1){for(;y<=y1;y++){pDC->SetPixel(int(x+0.5),y,c);x=x+1/k;}}ReleaseDC(pDC); //释放设备指针}○3中点画线0≤k≤1时中点画线算法的算法步骤为:1.输入直线的两端点P0(x0,y0)和p1(x1,y1)。

计算机图形学实验报告

计算机图形学实验报告

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

河南工大DSP实验报告

河南工大DSP实验报告

实验一数据存储实验一实验目的1.掌握TMS320F2812程序空间的分配。

2.掌握TMS320F2812数据空间的分配。

3.能够熟练运用TMS320F2812数据空间的指令。

二实验步骤与内容1.在进行DSP实验之前,需先连接好仿真器、实验箱及计算机,连接方法如下所示。

2.F2812CPU板的JUMP1的1和2脚短接,拨码开关SW1的第二位置ON;其余OFF。

3.E300底板的开关SW4的第2位置ON,其余位置OFF。

其余开关设置为OFF。

4.上电复位在硬件安装完成后,确认安装正确、各实验部件及电源连接无误后,启动计算机,接通仿真器电源,此时,仿真器上的指示灯应点亮,否则DSP开发系统与计算机连接存在问题。

5.运行CCS程序1)待计算机启动成功后,实验箱220V电源置“ON”,实验箱上电2)启动CCS5.5,工作环境的路径选择:E:\E300Program\E300 TechV-2812\normal6.成功运行CCS5.5程序后,出现如下图所示界面。

7.点菜单栏Project/Build All命令编译整个工程,编译完成后点击按钮:8. 用“View”下拉菜单中的“Memory/Browser”查看内存单元,初始参数如下图:此时可以观测到以0x003F9020为起始地址的存储单元内的数据。

9.单击按钮,开始运行程序,一段时间后,单击按钮,停止程序运行,查看0x003F9020H~ 0x3F902FH单元的数据的变化。

10. 关闭Memory Browser窗口,点击按钮,退出仿真模式。

右键点击Project Explorer窗口下的工程文件“e300_01_mem”,选择Close Project命令关闭该工程,然后关闭CCS软件,本实验完毕。

三程序框图四实验总结通过这次实验,基本熟悉了CCS用户界面的使用,掌握了TMS320F2812程序空间的分配和数据空间的分配,能够熟练运用数据空间的指令。

计算机图形学实验报告

计算机图形学实验报告

计算机图形学实验报告引言计算机图形学是计算机科学中一个重要的研究领域,它涉及了计算机图像的生成、处理和显示等方面的技术。

本次实验旨在通过实际操作学习计算机图形学的相关知识,并利用图形学算法实现一些有趣的效果。

实验目的1. 了解计算机图形学的基本概念和发展历程;2. 掌握图形学中的基本几何变换,如平移、旋转和缩放等;3. 实现一些常见的图形学算法,如光照模型、三角形剪裁和绘制等。

实验准备在开始实验之前,我们需要准备一些实验所需的工具和环境。

首先,确保计算机上安装了图形学相关的软件,如OpenGL或DirectX等。

其次,为了编写和运行图形学程序,我们需要掌握基本的编程技巧,如C++或Python语言,并了解相关的图形库和API。

实验过程1. 实现平移、旋转和缩放首先,我们需要掌握图形学中的基本几何变换,如平移、旋转和缩放。

通过矩阵运算,我们可以很方便地实现这些变换。

例如,对于一个二维点P(x, y),我们可以通过以下公式实现平移:P' = T * P其中,P'是平移后的点,T是平移矩阵。

类似地,我们可以用旋转矩阵和缩放矩阵来实现旋转和缩放效果。

2. 实现光照模型光照模型是指在计算机图形学中模拟现实光照效果的一种方法。

它可以提供更真实的视觉效果,让计算机生成的图像更加逼真。

其中,常用的光照模型有环境光照、漫反射光照和镜面光照等。

通过计算每个像素的光照强度,我们可以实现阴影效果和光源反射等功能。

3. 实现三角形剪裁三角形剪裁是计算机图形学中一种常用的几何算法,用于确定哪些像素需要绘制,哪些像素需要剔除。

通过对三角形的边界和视口进行比较,我们可以快速计算出剪裁后的三角形顶点,以提高图形渲染的效率。

4. 实现图形绘制图形绘制是计算机图形学中的核心内容,它包括了点、线和面的绘制等。

通过设定顶点坐标和属性(如颜色、纹理等),我们可以使用算法绘制出各种形状的图像。

其中,常用的绘制算法有Bresenham算法和扫描线算法等。

计算机图形学--全部实验的实验报告

计算机图形学--全部实验的实验报告

一、实验目的根据曲线和曲面的基础知识和常用曲线的数学基础,对其算法进行程序设计,验证算法的正确性,并通过程序结果加深对常用曲线数学模型的理解。

二、实验任务1.抛物线程序设计;2.Hermite 曲线程序设计;3.Bezier曲线的算法实现;4.B样条曲线的程序设计三、实验内容和实验步骤任务一:抛物线程序设计实现抛物线算法的C语言程序段如下:(工程名:parabola)Par(int xs,int ys,int xm,int ym,int xe,int ye) //已知起点、中点和终点三个控制点的坐标{double t,dt,ax,ay,bx,by,cx,cy;int n,i;ax=xe-2*xm+xs;ay=ye-2*ym+ys;bx=2.0*(xm-xs);by=2.0*(ym-ys);cx=xs; cy=ys;n=sqrt(ax*ax+ay*ay);n=sqrt(n*100.0);moveto(xs,ys);dt=1.0/n; t=0;for (i=0;i<=n; i++){lineto((int)(ax*t*t+bx*t+cx),(int)( ay*t*t+by*t+cy));t=t+dt;}lineto(xe,ye);}读者可以根据上述抛物线程序设计,写出抛物线参数样条曲线的程序。

任务二:Hermite 曲线程序设计P(t)=FB=TMB=[ t3 t2 t 1 ]程序设计时只考虑二维图形的显示,其代数形式为:x(t)=TMBx , Bx =[ P0x P1x R0x R1x]Ty(t)= TMBy , By =[ P0y P1y R0y R1y]T所以,只要给出Hermite曲线的起点坐标(P0x,P0y),终点坐标(P1x,P1y),以及起点处的切矢量(R0x,R0y)和终点处的切矢量(R1x,R1y),参数变量t在[0,1]的范围内分别取0.01,0.02,…,1,步长为0.01,取100个点,分别求出P(t)=[ x(t),y(t)],在计算机屏幕上显示出每个坐标点,即可绘出Hermite曲线。

计算机图形学实验报告

计算机图形学实验报告

计算机图形学实验报告计算机图形学实验报告引言计算机图形学是研究计算机生成和处理图像的学科,它在现代科技和娱乐产业中扮演着重要的角色。

本实验报告旨在总结和分享我在计算机图形学实验中的经验和收获。

一、实验背景计算机图形学实验是计算机科学与技术专业的一门重要课程,通过实践操作和编程,学生可以深入了解图形学的基本原理和算法。

本次实验主要涉及三维图形的建模、渲染和动画。

二、实验内容1. 三维图形建模在实验中,我们学习了三维图形的表示和建模方法。

通过使用OpenGL或其他图形库,我们可以创建基本的几何体,如立方体、球体和圆柱体,并进行变换操作,如平移、旋转和缩放。

这些基本操作为后续的图形处理和渲染打下了基础。

2. 光照和着色光照和着色是图形学中重要的概念。

我们学习了不同的光照模型,如环境光、漫反射和镜面反射,并了解了如何在三维场景中模拟光照效果。

通过设置材质属性和光源参数,我们可以实现逼真的光照效果,使物体看起来更加真实。

3. 纹理映射纹理映射是一种将二维图像映射到三维物体表面的技术。

通过将纹理图像与物体的顶点坐标相对应,我们可以实现更加细致的渲染效果。

在实验中,我们学习了纹理坐标的计算和纹理映射的应用,使物体表面呈现出具有纹理和细节的效果。

4. 动画和交互动画和交互是计算机图形学的重要应用领域。

在实验中,我们学习了基本的动画原理和算法,如关键帧动画和插值技术。

通过设置动画参数和交互控制,我们可以实现物体的平滑移动和变形效果,提升用户体验。

三、实验过程在实验过程中,我们首先熟悉了图形库的使用和基本的编程技巧。

然后,我们按照实验指导书的要求,逐步完成了三维图形建模、光照和着色、纹理映射以及动画和交互等任务。

在实验过程中,我们遇到了许多挑战和问题,但通过不断的尝试和调试,最终成功实现了预期的效果。

四、实验结果通过实验,我们成功实现了三维图形的建模、渲染和动画效果。

我们可以通过键盘和鼠标控制物体的移动和变形,同时观察到真实的光照效果和纹理映射效果。

河南工业大学实验报告

河南工业大学实验报告

河南工业大学实验报告(2014~2015学年-第1学期)一、实验目的:1. 了解结构化程序设计的基本思想;2. 掌握使用工程组织多个程序文件的方法。

3. 掌握函数嵌套的使用方法。

4.掌握递归函数的编程方法。

二.编程环境Windows8.1Codeblock三.实验要求及内容:1.编写一个函数,利用参数传入一个3位数number,找出101~number 之间所有满足下列两个条件的数:它是完全平方数,又有两位数字相同,如144、676等,函数返回找出这样的数据的个数,并编写主函数。

输入输出示例:Enter a number :150 count = 2①源代码②测试用例Enter a number :150Count = 2;③实验结果2. 用递归函数计算x n的值。

输入输出示例:Enter x:2Enter n:3Root = 8.00①源代码②测试用例Enter x:2Enter n:3Root = 8.00③实验结果3. 用递归方法编写求斐波那契数列项的函数,返回值为整型,并写出相应的主函数。

斐波那契数列的定义为:f(0)= 0,f(1)=1)+ f(n-1)(n>1)①源代码②实验用例输入10输出55③实验结果如下图4. 输入两个整数m和n(m≥0且n≥0),输出函数Ack(m,n)的值。

Ack(0,n)= n+1Ack(m,0)= Ack(m-1,1)Ack(m,n)= Ack(m-1,Ack(m,n-1))(m>0且n>0)输入输出示例:Enter x:2Enter y:3Ackerman(2,3)= 9①源代码如下图②测试用例输入x : 2输入y: 3输出Ackerman (2,3) = 9③实验结果如下图5*(选做):输入一个正整数n,将其转换为二进制后输出。

要求定义并调用函数dectobin(n),它的功能是输出n的二进制。

例如,调用dectobin(10),①源代码②测试用例输入20输出10100③实验结果如下图6. 输入n(n<10)个整数,统计其中素数的个数。

图形学实验报告

图形学实验报告

图形学实验报告计算机图形学实验指导书学号:1441901105姓名:谢卉实验一:图形的几何变换实验学时:4学时实验类型:验证实验要求:必修一、实验目的二维图形的平移、缩放、旋转和投影变换(投影变换可在实验三中实现)等是最基本的图形变换,被广泛用于计算机图形学的各种应用程序中,本实验通过算法分析以及程序设计实验二维的图形变换,以了解变换实现的方法。

如可能也可进行裁剪设计。

二、实验内容掌握平移、缩放、旋转变换的基本原理,理解线段裁剪的算法原理,并通过程序设计实现上述变换。

建议采用VC++实现OpenGL程序设计。

三、实验原理、方法和手段1.图形的平移在屏幕上显示一个人或其它物体(如图1所示),用交互操作方式使其在屏幕上沿水平和垂直方向移动Tx和Ty,则有x’=x+Tx y’=y+Ty其中:x与y为变换前图形中某一点的坐标,x’和y’为变换后图形中该点的坐标。

其交互方式可先定义键值,然后操作功能键使其移动。

2.图形的缩放在屏幕上显示一个帆船(使它生成在右下方),使其相对于屏幕坐标原点缩小s倍(即x方向和y方向均缩小s倍)。

则有:x’=x*s y’=y*s注意:有时图形缩放并不一定相对于原点,而是事先确定一个参考位置。

一般情况下,参考点在图形的左下角或中心。

设参考点坐标为xf、yf则有变换公式x’=x*Sx+xf*(1-Sx)=xf+(x-xf)*Sxy’=y*Sy+yf*(1-Sy)=yf+(y-yf)*Sy式中的x与y为变换前图形中某一点的坐标,x’和y’为变换后图形中该点的坐标。

当Sx>1和Sy>1时为放大倍数,Sx<1和Sy<1时为缩小倍数(但Sx 和Sy必须大于零)。

3.图形的旋转在屏幕上显示一个汽车,根据自己确定的旋转角度和旋转中心对图形进行旋转。

旋转公式为x’=xf+(x-xf)*cos(angle)-(y-yf)*sin(angle)y’=yf+(y-yf)*cos(angle)+(x-xf)*sin(angle)其中:xf,yf为围绕旋转的中心点的坐标。

计算机图形学实验报告

计算机图形学实验报告

计算机图形学实验报告一、实验目的本次计算机图形学实验旨在深入了解和掌握计算机图形学的基本原理、算法和技术,通过实际操作和编程实现,提高对图形生成、处理和显示的能力,培养解决实际图形问题的思维和实践能力。

二、实验环境本次实验使用的编程语言为 Python,借助了相关的图形库如Pygame 或 matplotlib 等。

开发环境为 PyCharm 或 Jupyter Notebook。

三、实验内容(一)二维图形的绘制1、直线的绘制使用 DDA(Digital Differential Analyzer)算法或 Bresenham 算法实现直线的绘制。

通过给定直线的起点和终点坐标,在屏幕或图像上绘制出直线。

比较两种算法的效率和准确性,分析其优缺点。

2、圆的绘制采用中点画圆算法或 Bresenham 画圆算法绘制圆。

给定圆心坐标和半径,生成圆的图形。

研究不同半径大小对绘制效果和计算复杂度的影响。

(二)图形的填充1、多边形填充实现扫描线填充算法,对任意多边形进行填充。

处理多边形的顶点排序、交点计算和填充颜色的设置。

测试不同形状和复杂度的多边形填充效果。

2、图案填充设计自定义的填充图案,如纹理、条纹等,并将其应用于图形填充。

探索如何通过改变填充图案的参数来实现不同的视觉效果。

(三)图形的变换1、平移、旋转和缩放对已绘制的图形(如矩形、三角形等)进行平移、旋转和缩放操作。

通过矩阵运算实现这些变换。

观察变换前后图形的位置、形状和方向的变化。

2、组合变换将多个变换组合应用于图形,如先旋转再平移,或先缩放再旋转等。

分析组合变换的顺序对最终图形效果的影响。

(四)三维图形的表示与绘制1、三维坐标变换学习三维空间中的平移、旋转和缩放变换矩阵,并将其应用于三维点的坐标变换。

理解如何将三维坐标映射到二维屏幕上显示。

2、简单三维图形绘制尝试绘制简单的三维图形,如立方体、球体等,使用线框模型或表面模型。

探讨不同的绘制方法和视角对三维图形显示的影响。

河南工业大学《大学计算机基础及office应用》实验报告-实验单元二

河南工业大学《大学计算机基础及office应用》实验报告-实验单元二

河南工业大学《大学计算机基础及office应用》实验报告专业班级:学号:姓名:实验单元二Excel的操作及应用实验四Excel工作表的基本操作和格式化实验时间:【实验目的】1、熟练掌握各种数据类型的输入方法。

2、对表格进行格式化编辑。

【实验环境】安装了Windows 7操作系统和Office 2010应用软件的PC机。

【实验内容】按照教材209页的“实训项目4_1 商品销售报表”的要求完成相应操作。

【实验步骤】(此项由学生自己参照教材210页实训步骤完成。

)【实验结果】(以截图的方法呈现,参照教材210页图4-98。

将制作好的电子表格保存下来,实验五和实验六继续要使用。

)【实验体会】(至少150字,写出实验遇到问题及其解决方案和收获。

)实验五Excel数据管理实验时间:【实验目的】1、熟练使用填充工具对数据进行完善。

2、熟练使用公式或者函数完成数据管理。

3、掌握对数据的排序、筛选和分类汇总。

【实验环境】安装了Windows 7操作系统和Office 2010应用软件的PC机。

【实验内容】在实验四操作结果的基础上按照教材211页的“实训项目4_2 数据管理”的要求完成相应操作。

【实验步骤】(此项由学生自己完成)【实验结果】(以截图的方法呈现,将制作好的电子表格保存下来,实验六继续要使用。

)【实验体会】(至少150字)实验六Excel创建图表实验时间:【实验目的】掌握为表格数据创建图表的方法。

【实验环境】安装了Windows 7操作系统和Office 2010应用软件的PC机。

【实验内容】在实验四操作结果的基础上按照教材213页的“实训项目4_3 创建图表”的要求完成相应操作。

【实验步骤】(此项由学生自己完成)【实验结果】(以截图的方法呈现)【实验体会】(至少150字)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四:二维变换与裁剪算法的实现
一、实验目的
1、掌握平移变换、旋转变换和缩放变换方法;
2、达到掌握二维图形基本几何变换及运用几何变换快速方便生成图形的目的;
3、掌握图形裁剪算法。

二、实验要求
1. 在MFC单文档应用程序中,添加奇次二维坐标点类CP2,如图1.1 所示,参考图1.2部分代码,分别完成二维图形的平移、旋转和缩放。

(注:变换参数可在程序内直接给出或用对话框等形式输入,简单二维图形经二维变换后可生成复杂图形。


图1.1 CP2类定义
图1.2 部分二维变换参考代码
2. 利用Cohen-Sutherland端点编码算法编程实现任意线段的裁剪,要求自定义窗口区域和直线端点。

(注:未被裁剪的线段及被裁剪的线段用不同的颜色显示出来。


三、实验内容
一,二维图形的变换
○1菜单栏的建立
○2对话框的创建,
创建对应的类为dialog
○3为编辑框Edit添加成员变量:右键,建立类向导,选择Member Variables,双击
IDC_EDIT1(对应编辑框的ID),
Member variable name m_x1
Category Value
Variable type OK
○4新建两个类CCP2和TransForm,CCP2类用于将二维点坐标转换成齐次坐标,TransForm类是平移,旋转,缩放的具体实现。

代码如下:
// CP2.h
#pragma once
class CP2
{
public:
CP2();
virtual ~CP2();
CP2(double x, double y);
//如果滚动条不能拉动,请启用宏。

○5在文件视图中找到test4View.h protected里面加入变量
CString x1,y1,x2,y2,translate,scale,rotate。

用于在test4View.cpp中接收编辑框的值。

○6在test4View.cpp中加入#include “dialog.h”。

在菜单栏中为“二维变换”建立类向导,为它添加消息。

void CTest4View::Onchange()
{
// TODO: Add your command handler code here
dialog dia;
if(dia.DoModal()==IDOK){ // dia.DoModal()显示一个模态对
//框,返回值为IDOK。

x1=dia.m_x1; //将编辑框的值赋给test4View中的变量
y1=dia.m_y1;
x2=dia.m_x2;
y2=dia.m_y2;
translate=dia.m_translate;
scale=dia.m_scale;
rotate=dia.m_rotate;
Invalidate(); //Invalidate()是强制系统进行重画}
}
○7建立一个Var类,用于将传递一个全局变量flag。

flag的值为0,1,2,3分别实现画线,平移,旋转,缩放。

○8点击不同按钮修改flag的值执行不同的操作:
CDialog::OnOK()表示关闭对话框方式为OnOk()
○9在test4View.cpp中的OnDraw()函数里实现具体功能
○10实验结果展示
生成直线平移操作
旋转操作缩放操作
二,裁剪算法
○1基本思想:
对于每条待裁剪的线段P1P2分三种情况处理:
①若P1P2完全在窗口内,则显示该线段P1P2,简称“取”之;
②若P1P2完全在窗口外,则丢弃该线段,简称“舍”之;
③若线段既不满足“取”的条件,也不满足“舍”的条件,则求线段与窗口边界的交点,在交点处把线段分为两段,其中一段完全在窗口外,可舍弃之,然后对另一段重复上述处理。

○2算法步骤:
第一步判别线段两端点是否都落在窗口内,如果是,则线段完全可见;
否则进入第二步;
第二步判别线段是否为显然不可见,如果是,则裁剪结束;
否则进行第三步;
第三步求线段与窗口边延长线的交点,这个交点将线段分为两段,其中一段显然不可见,丢弃。

对余下的另一段重新进行第一步,第二步判断,直至结束。

○3新建类CP1,代码如下:
○4新建类LineClipping,代码如下:
○5为菜单项裁剪算法的响应事件添加代码。

代码如下:
○6实验运行结果:
四、实验结果与总结
(列出实验过程中的收获和遇到的困难)
这次实验虽然做的是二维变换与裁剪算法的实现,但是大部分时间却花在了实现对话框输值,画布上画画的功能上,也算是弥补上一次实验吧。

此次实验钻研了以下几个问题:
○1对比了博客上MFC对话框操作的两种方法。

个人总结的区别有以下三点:首先,第
一种方法Category选择value,第二种选择Control。

Value一般指字符串,各种数据类型(int等);Control一般指该控件对应的MFC类。

如果为编辑框控件关联变量,如果是Value,那么该变量数据类型可以是CString,或int或float等数据类型;如果是control,那么该变量的数据类型只能是CEdit。

其次,若选择是Control,还需要在dialog类里面定义自己的成员变量,在按钮的响应事件中通过this->GetDlgItemText();将编辑框中的值获取并赋给成员变量。

最后,在...View类中复制的方法也不一样,第一种控件变量复制:
x1=dia.m_x1,第二种为成员变量:x1=dia.x1。

○2关于if(dlg.DoModal()==IDOK){…},当dlg.DoModal()后,显示一个模态对话框,此
时DoModal()函数并不返回,即并没有执行大括号内的内容,直到用户关闭此对话框时,DoModal才返回。

如果用户点击了确定按钮,那么DoModal()函数就返回IDOK,此时进入if语句。

IDOK是一个宏。

当你CMyDlg dlg;时,对话框并没有显示,只是构造了一个CMyDlg 类型的对象而已,直到用户调用DoModal(),对话框才会显示出来。

而且有意思的是DoModal()只有两个定义好的返回值IDOK和IDCANCLE,其实对应的就是默认的确认和取消,其他返回值需要自定义。

这使我在点击不同按钮实现不同功能时碰到了困难,因为只有两个两个返回值,而我需要实现四个功能,对此我的解决方案是这样的,最初,只用一个IDOK返回值,没实现一个功能就换代码截完图,写完实验报告蒙混过关。

接着,既然只用一个的话,为什么不在一个if(dlg.DoModal()==IDOK){}里把三个功能一起实现,在画布上把平移,旋转,缩放一同画出来。

后来,好像全局变量可以解决这个问题诶,才有了之后的flag。

这儿还有一个未解决的问题就是:不要if,直接dlg.DoModal()好像也能达到目的,区别在哪,尚未明了。

○3Invalidate();把这句代码删除之后,就没法在画布上画画了,而且程序中断。

多次试
验个人总结出来的结果是:Invalidate()是强制系统进行重画。

点击对话框上的按钮后,对话框关闭,返回IDOK,Invalidate()进行重画,调用…View中的OnDraw()函数。

由于在对话框传值,画布上画画上花费了大量时间,对此次实验二维变换和裁剪算法并没有深究,仅仅是使其能运行就OK了,而且稍微偷了点懒,只试了直线,并没有画出一些三角形,矩形等二维图形。

之后有时间再完善。

相关文档
最新文档