文档库 最新最全的文档下载
当前位置:文档库 › 计算机图形学 图形的几何变换的实现算法

计算机图形学 图形的几何变换的实现算法

计算机图形学  图形的几何变换的实现算法
计算机图形学  图形的几何变换的实现算法

实验二 图形的几何变换的实现算法

班级 08信计 学号 59 姓名 分数

一、实验目的和要求:

1、掌握而为图形的基本几何变换,如平移,旋转,缩放,对称,错切变换;。

2、掌握OpenGL 中模型变换函数,实现简单的动画技术。

3、学习使用OpenGL 生成基本图形。

4、巩固所学理论知识,加深对二维变换的理解,加深理解利用变换矩阵可由简单图形得到复杂图形。加深对变换矩阵算法的理解。

编制利用旋转变换绘制齿轮的程序。编程实现变换矩阵算法,绘制给出形体的三视图。调试程序及分析运行结果。要求每位学生独立完成该实验,并上传实验报告。

二、实验原理和内容:

. 原理:

图像的几何变换包括:图像的空间平移、比例缩放、旋转、仿射变换和图像插值。 图像几何变换的实质:改变像素的空间位置,估算新空间位置上的像素值。

图像几何变换的一般表达式:[,][(,),(,)]u v X x y Y x y = ,其中,[,]u v 为变换后图像像素的笛卡尔坐标, [,]x y 为原始图像中像素的笛卡尔坐标。这样就得到了原始图像与变换后图像的像素的对应关系。

平移变换:若图像像素点 (,)x y 平移到 00(,)x x y y ++,则变换函数为

0(,)u X x y x x ==+,

0(,)v Y x y y y ==+,写成矩阵表达式为:

00x u x y v y ??????=+????????????

其中,x 0和y 0分别为x 和y 的坐标平移量。

比例缩放:若图像坐标 (,)x y 缩放到( ,x y s s )倍,则变换函数为:

00x y s u x s v y ??????=??????????

?? 其中, ,x y s s 分别为x 和y 坐标的缩放因子,其大于1表示放大,小于1表示缩小。

旋转变换:将输入图像绕笛卡尔坐标系的原点逆时针旋转θ角度,则变换后图像坐标为: cos sin sin cos u x v y θ-θ??????=??????θθ??????

内容:

1、对一个三角形分别实现平移,缩放旋转等变化。

2. 在方向、尺寸和形状方面的变换是用改变对象坐标描述的几何变换来完成的。基本几何变换都是相对于坐标原点和坐标轴进行的几何变换,有平移、旋转、缩放、反射、错切等。

用直线命令画出一个齿(或六边形的一半)→利用旋转变换或对称变换矩阵实现对其余部分的绘制→调试运行程序→输出图形→分析结果→结束。

编写三维变换算法程序→检查程序的正确性→分段调试程序→输入给出的三维形体各顶点的坐标→执行变换→对算法程序进行必要的调整→更换不同的形体数据继续变换→结束。

3.用实验一的方法解决这个问题,某三角形的三个点点坐标为{5.0.0.25.0},{150.0.25.0},{100.0.100.0},创建一个长度分别为600,600的窗口,窗口的左上角位于屏幕坐标(100,100)处。然后绘制一个由上述顶点所绘制的三角形,实现该三角形进行下列几何变换:首先使三角形沿着其中心的x轴和y轴方向缩小50%,然后沿着出示中心旋转90度;最后沿着y轴平移100个单位。

三、实验代码如下

1实验一

#include

#include

Void init (void)

{

glClearVolor (0.0,0.0,0.0,0.0);

glShadeModel (GL-FLAT);

}

Void draw_triangle(void)

{

glBegin(GL_LINE_LOOP);

glVertex2f(0.0,25.0);

glVertex2f(25.0,-25.0);

glVertex2f(-25.0,-25.0);

glEnd();

}

Void display(void)

{

glClear (GL_COLOR_BUEFER_BIT);

glColor3f(1.0,1.0,1.0);

glLoadIdentity();

glColor3f(1.0,1.0,1.0);

draw_triangle();

glEnable (GL_LINE_STIPPLE);

glLineStipple (1,0xF0F0);

glLoadIdentity();

glTranslatef (-20.0,0.0,0.0);

draw_triangle();

glLineStipple (1,0xff00);

glLoadIdentity ();

glScalef (1.5,0.5,1.0);

draw_triangle ();

glLineStipple (1,0x8888);

glLoadIdentity();

glRotatef(90.0,0.0,0.0,1.0);

draw_triangle ();

glDisable (GL_LINE_STIPPLE);

glFlush();

}

Void reshape (int w,,nt h)

{

glViewport (0,0,(GLsizei) w,(GLsizei) h);

glMatrixMode (GL_PROJECTION);

glLoadIdentity ();

if (w<=h)

gluOrtho2D(-50.0,50.0,-50.0*(GLfloat)h/(GLfloat)w,50.0*(GLfloat)h/(GLfloat)w); glMatrixMode(GL_MODELVIEW);

}

int main (int argc,char**argv)

{

glutInit(&argc,argv);

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize (500,500);

glutInitWindowPosition (100,100);

glutCreatWindow (argv[0]);

init ();

glutDisplayFunc (display);

glutReshapeFunc (reshape);

glutMainLoop();

return 0;

}

实验结果如下

2实验二代码

#include

#include

int a[14][4]={{30,0,0,1},{30,40,0,1},{0,40,0,1},{0,40,10,1},{0,30,30,1}, {0,0,30,1},{30,0,30,1},{30,10,30,1},{10,10,30,1},{10,30,30,1},{10,40,10,1}, {10,10,10,1},{30,10,10,1},{30,40,10,1}};

float t[4][4],p[14][4];

void a400()

{int i,j;

for(i=0;i<4;i++)

for(j=0;j<4;j++)

t[i][j]=0;

}

void a500()

{ int k,i,j;

for(i=0;i<14;i++)

{for(j=0;j<4;j++)

{p[i][j]=0;

for(k=0;k<4;k++)

p[i][j]=p[i][j]+a[i][k]*t[k][j];}

p[i][0]=p[i][0]+280;

p[i][1]=-p[i][1]+180;

}

setcolor(9);

moveto(p[0][0],p[0][1]);

for(i=0;i<14;i++)

lineto(p[i][0],p[i][1]);

line(p[6][0],p[6][1],p[0][0],p[0][1]);

line(p[7][0],p[7][1],p[12][0],p[12][1]); line(p[8][0],p[8][1],p[11][0],p[11][1]); line(p[9][0],p[9][1],p[4][0],p[4][1]);

line(p[10][0],p[10][1],p[3][0],p[3][1]); line(p[13][0],p[13][1],p[10][0],p[10][1]); line(p[1][0],p[1][1],p[13][0],p[13][1]); getch();

}

main()

{int driver,mode,i,j;

driver=DETECT;

initgraph(&driver,&mode,"d:\\tc"); setbkcolor(3);

a400();

t[0][0]=0.7071*3;

t[0][1]=-0.4082*3;

t[1][0]=-0.7071*3;

t[1][1]=-0.4082*3;

t[2][1]=0.8165*3;

t[3][3]=1;

a500();

closegraph();

}

实验结果

实验三结果

三、实验结果分析

. 1、该程序实现了而为图形的简单几何变换,包括平移,缩放旋转等。

2、平移变换时最简单的变换,错切变换实际上是用比例因子乘对象的每一坐标和增加位移值。

3、上面所讨论的图形变换时相对于坐标原点或坐标轴来进行的。实际中,常常需要相对于人一点或任一轴来进行变换。

计算机图形学裁剪算法详解

裁剪算法详解 在使用计算机处理图形信息时,计算机部存储的图形往往比较大,而屏幕显示的只是图的一部分。因此需要确定图形中哪些部分落在显示区之,哪些落在显示区之外,以便只显示落在显示区的那部分图形。这个选择过程称为裁剪。最简单的裁剪方法是把各种图形扫描转换为点之后,再判断各点是否在窗。但那样太费时,一般不可取。这是因为有些图形组成部分全部在窗口外,可以完全排除,不必进行扫描转换。所以一般采用先裁剪再扫描转换的方法。 (a)裁剪前 (b) 裁剪后 图1.1 多边形裁剪 1直线段裁剪 直线段裁剪算法比较简单,但非常重要,是复杂图元裁剪的基础。因为复杂的曲线可以通过折线段来近似,从而裁剪问题也可以化为直线段的裁剪问题。常

用的线段裁剪方法有三种:Cohen-Sutherland,中点分割算法和梁友栋-barskey 算法。 1.1 Cohen-Sutherland裁剪 该算法的思想是:对于每条线段P1P2分为三种情况处理。(1)若P1P2完全在窗口,则显示该线段P1P2简称“取”之。(2)若P1P2明显在窗口外,则丢弃该线段,简称“弃”之。(3)若线段既不满足“取”的条件,也不满足“弃”的条件,则在交点处把线段分为两段。其中一段完全在窗口外,可弃之。然后对另一段重复上述处理。 为使计算机能够快速判断一条直线段与窗口属何种关系,采用如下编码方法。延长窗口的边,将二维平面分成九个区域。每个区域赋予4位编码CtCbCrCl.其中各位编码的定义如下:

图1.2 多边形裁剪区域编码图5.3线段裁剪 裁剪一条线段时,先求出P1P2所在的区号code1,code2。若code1=0,且code2=0,则线段P1P2在窗口,应取之。若按位与运算code1&code2≠0,则说明两个端点同在窗口的上方、下方、左方或右方。可判断线段完全在窗口外,可弃之。否则,按第三种情况处理。求出线段与窗口某边的交点,在交点处把线段一分为二,其中必有一段在窗口外,可弃之。在对另一段重复上述处理。在实现本算法时,不必把线段与每条窗口边界依次求交,只要按顺序检测到端点的编码不为0,才把线段与对应的窗口边界求交。 Cohen-Sutherland裁减算法 #define LEFT 1 #define RIGHT 2 #define BOTTOM 4

计算机图形学-图形的几何变换

贵州大学实验报告 学院:计算机科学与技术专业:软件工程班级:软件132 姓名常伟学号1308060226 实验地点一教704 实验时间2016.5.9 指导教师李智实验成绩 实验项目名称试验四、图形的几何变换 实验目的1.掌握矢量运算。 2.熟练使用齐次坐标。 3.掌握采用齐次坐标进行几何变换。 实验要求1.理解几何图形变换的原理,编程实现图形的几何变换。 2.编程界面友好,实现变换的所有方式,包括平移、缩放、旋转、对称、错切以及基本变换基础上的组合变换。 3.几何变换使用矩阵进行运算。

实验原理 二维齐次坐标变换的矩阵的形式是 ? ? ? ? ? ? ? ? ? ? i h g f e d c b a 这个矩阵的每一个元素都是有特殊含义的。其中,? ? ? ? ? ? e d b a 可以对图形进行缩放、旋 转、对称和错切等变换;? ? ? ? ? ? f c 是对图形进行平移变换;[]h g是对图形作投影变换;[]i 则是对图形进行缩放变换。 下面给出几个基本变换的矩阵运算。 1.平移变换 ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? + + = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? ? ? 1 ) , ( 1 1 1 1 1 1 ' ' y x T y x y x t t t t t t y x y x y x y x 2.缩放变换 ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? 1 ) , ( 1 1 1 1 ' ' y x s s S y s x s y x s s y x y x y x y x 3.旋转矩阵 ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? + - = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?- = ? ? ? ? ? ? ? ? ? ? 1 ) ( 1 cos sin sin cos 1 1 cos sin sin cos 1 ' ' y x R y x y x y x y x θ θ θ θ θ θ θ θ θ 4.对称矩阵 ? ? ? ? ? ? ? ? ? ? + + = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? 1 1 1 1 ' ' ey dx by ax y x e d b a y x 对称变换其实只是a、b、d、e取0、1等特殊值产生的一些特殊效果。 5.错切变换 ? ? ? ? ? ? ? ? ? ? + + = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? 1 1 1 1 1 1 ' ' y dx by x y x d b y x

图形的几何变换

《计算机图形学》上机实习报告(一)——基本图形的生成 一、实习目的和要求 1、目的 深入学习三种基本几何变换的原理和方法,以及错切、镜像变换同上的类同性, 同时,在掌握基本几何变换的基础上理解组合变换的实现机制,掌握几何变换 的共同特点; 通过程序的编写和运行,学习基本几何变换在程序上的实现方法,这就要求掌 握结构体、一维数组的基本性质和使用方法; 进一步锻炼使用WIN-TC的熟练程度。 2、要求 实现平移变换、比例变换、旋转变换三种基本几何变换; 实现镜像变换、错切变换; 二、运行环境 本次上机在WIN-TC 中进行。 三、直线的生成——用Bresenham算法实现 1、算法基本原理 图形的几何变换一般是指对图形的几何信息经过变换后产生新的图形,图形几何变换既可以看作是坐标系不动而图形变动,变动后的图形在坐标系中的坐标值发生变化;出可以看作图形不动而坐标系变动,变动后的图形在新坐标系下具有新的坐标值。这两种情况本质上都是一样的,都是图形由新的坐标值表示,因此是新产生的图形。图形几何变换包括比例变换、对称变换、错切变换、旋转变换、平移变换及其复合变换。图形上所有的点在几何变换前后的坐标关系一般用解析几何方法可以求得,但这些几何关系用矩阵方法表示,运算更为方便。 图形基本几何变换是指比例变换、对称变换、错切变换、旋转变换和平移变换等。变换通过矩阵运算均可以表示为表示几何图形的点阵的一维矩阵和表示变换的三维矩阵相乘的形式,即P’=P·T,具体如下: 平移变换

比例变换 旋转变换 对称变换 对称于x轴对称于y轴对称于原点 对称于y=x 对称于y=-x 错切变换 沿x轴方向关于y的错切 沿y轴方向关于x的错切 2、对程序中变量的说明 3、源程序 4、运行结果 5、个人总结

计算机图形学--图形几何变换实现

实验五 图形几何变换的实现 班级:信计二班 学号: :解川 分数: 一、实验目的 为了掌握理解二维、三维的数学知识、变换原理、变换种类、变换方法;进一步理解采用齐次坐标进行二维、三维变换的必要性;利用VC++语言实现二维、三维图形的基本变换与复合变换。 二、实验容 (1) 理解采用齐次坐标进行图形变换的必要性——变换的连续性,使复合变换 得以实现。 (2) 掌握二维、三维图形基本变换的原理及数学公式。 (3) 利用VC++语言实现二维、三维图形的基本变换、复合变换,在评不上显 示变换过程或变换结果。 三、实验步骤 (1) 预习教材关于二维、三维图形变换的原理与方法。 (2) 使用VC++语言实现某一种或几种基本变换。 (3) 调试、编译、运行程序。 四、原理分析 源程序分别实现了对二维图形进行的平移变换—基本变换;对三维图形进行的绕某一个坐标轴旋转变换以及相对于立方体中心的比例变换—复合变换。 三维几何变换: (1) 比例变换: []1111z y x =[]1z y x T 3D =[]1z y x ????? ?? ?? ???s n m l r j i h q f e d p c b q 局部比例变换: s T =? ? ??? ???? ???1000000000000j e a 其中a 、b 、j 分别为在x 、y 、z 方向的比例系数。

整体比例变换: s T =? ? ??? ???? ???s 000010000100001其中s 为在xyz 方向的等比例系数。S>1时,整体缩小;s<1时,整体放大。 (2) 旋转变换: 旋转变换的角度方向为(沿坐标轴的反方向看去,各轴按逆时针方向旋转) 绕z 轴旋转: RZ T =?? ??? ???? ???-100 010000cos sin 00sin cos θθθθ 绕x 轴旋转: RX T =??????? ?? ???-10 00 0cos sin 00sin cos 000 01 θθθθ 绕y 轴旋转: RY T =????? ???? ???-10 0cos 0sin 00100sin 0cos θθθθ 程序代码: /*三维图形(立方体)旋转变换、比例变换*/ #include #include #include #include #include #include #define ZOOM_IN 0.9 #define ZOOM_OUT 1.1

计算机图形学图形的几何变换的实现算法

实验二图形的几何变换的实现算法 班级 08 信计 学号 59 姓名 _____ 分数 _____ 一、 实验目的和要求: 1、 掌握而为图形的基本几何变换,如平移,旋转,缩放,对称,错切变换;< 2、 掌握OpenG 冲模型变换函数,实现简单的动画技术。 3、 学习使用OpenGL 生成基本图形。 4、 巩固所学理论知识,加深对二维变换的理解,加深理解利用变换矩阵可 由简单图形得到复杂图形。加深对变换矩阵算法的理解。 编制利用旋转变换绘制齿轮的程序。编程实现变换矩阵算法,绘制给出形体 的三视图。调试程序及分析运行结果。要求每位学生独立完成该实验,并上传实 验报告。 二、 实验原理和内容: .原理: 图像的几何变换包括:图像的空间平移、比例缩放、旋转、仿射变换和图像插值。 图像几何变换的实质:改变像素的空间位置,估算新空间位置上的像素值。 图像几何变换的一般表达式:[u,v ]=[X (x, y ),Y (x, y )],其中,[u,v ]为变换后图像 像素的笛卡尔坐标, [x, y ]为原始图像中像素的笛卡尔坐标。这样就得到了原始图像与变 换后图像的像素的对应关系。 平移变换:若图像像素点(x, y )平移到(x x 。,y ■ y 。),则变换函数为 u = X (x, y ) =x 沟, v 二丫(x, y ) = y ■ y 。,写成矩阵表达式为: 比例缩放:若图像坐标 (x,y )缩放到(S x ,s y )倍,则变换函数为: S x ,S y 分别为x 和y 坐标的缩放因子,其大于1表示放大, 小于1表示缩小。 旋转变换:将输入图像绕笛卡尔坐标系的原点逆时针旋转 v 角度,则变换后图像坐标为: u COST 内容: :u l :Sx k ;0 其中,x 0和y 0分别为x 和y 的坐标平移量。 其中,

(计算机图形学)关于任意直线的对称变换

实验3:关于任意直线的对称变换 实验类型:验证、设计 所需时间:3学时 主要实验内容及要求: 对于任意直线的二维图形对称变化的实验,要求输入的直线是任意直线,直线的端点只能由键盘输入或者鼠标拾取,要做对称变换的图形也是一个任意图形(至少应是一个任意多边形)。 对称变换,先分析如何使用一系列简单变换来构造题目要求的复合变换。本体要实现的变换可以用如下一组变换组合来实现: ①将直线任一点移至与坐标原点重合 ②将平移后的直线绕原点旋转至与某一坐标轴重合 ③将题目要求的对称变换转为实现已知图形关于上述坐标轴的对称变换 ④按逆序求上述①、②变换的逆变换 ⑤将上述矩阵依次相乘得到最终的复合变换矩阵 则某一多边形关于任意直线的对称变换就转变为将该多边形的各顶点与上述求得的复合变换进行矩阵乘法,求得变换后的新多边形的各个顶点坐标。 根据上述流程,编程实现,并测试程序功能。 源代码: #include #include using namespace std;

void Initial(void) { glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); } class CPoint { public: int x; int y; CPoint(){} CPoint(int x1,int y1) { x=x1; y=y1; } static CPoint ZeroMoveToXY(CPoint p, CPoint XY);//原始坐标向屏幕坐标XY 的平移 static CPoint ToZero(CPoint p);//关于原点对称 static CPoint XYMoveToZero(CPoint p, CPoint XY);//XY坐标向屏幕坐标的平移

图像的几何变换的两种实现(旋转、平移、放大、缩小)

面向对象程序设计 学号:2 学生所在学院:信息工程学院 学生姓名:邵丽群 任课教师:熊邦书 教师所在学院:信息工程学院

2013级 实现图像的几何变换 电子信息工程 信息工程学院 摘要:几何变换是最常见的图像处理手段,通过对变形的图像进行几何校正,可以得出准确的图像。常用的几何变换功能包括图像的平移、图像的镜像变换、图像的转置、图像的缩放、图像的旋转等等。目前数字图像处理的应用越来越广泛,已经渗透到工业、航空航天、军事等各个领域,在国民经济中发挥越来越大的作用。作为数字图像处理的一个重要部分,本文接受的工作是如何Visual C++编程工具设计一个完整的应用程序,实现经典的图像几何变换功能。程序大概分为两大部分:读写BMP图像,和数字图像的几何变换。即首先用Visual C++创建一个单文档应用程序框架,在实现任意BMP图像的读写,打印,以及剪贴板操作的基础上,完成经典的图像几何变换功能。图像几何变换的Visual C++编程实现,为校内课题的实现提供了一个实例。 关键字:图像处理;几何变换(图像的平移、缩放、转置、旋转和镜像变换);BMP图像;Visual C++

一、引言 图像几何变换是指用数学建模的方法来描述图像位置、大小、形状等变化的方法。在实际场景拍摄到的一幅图像,如果画面过大或过小,都需要进行缩小或放大。如果拍摄时景物与摄像头不成相互平行关系的时候,会发生一些几何畸变,例如会把一个正方形拍摄成一个梯形等。这就需要进行一定的畸变校正。在进行目标物的匹配时,需要对图像进行旋转、平移等处理。在进行三维景物显示时,需要进行三维到二维平面的投影建模。因此,图像几何变换是图像处理及分析的基础。 图像几何变换是计算机图像处理领域中的一个重要组成部分,也是值得深讨的一个重要课题。在图像几何变换中主要包括图像的放缩、图像的旋转、图像的移动、图像的镜像、图像的块操作等内容,几何变换不改变图像的像素值,只改变像素所在的几何位置。从广义上说,图像是自然界景物的客观反映,是人类认识世界和人类本身的重要源泉。图像对我们并不陌生。我们生活在一个信息时代,科学研究和统计表明,人类从外界获得的信息约有75%来自视觉系统,也就是从图像中获得的。所以对数字图像的处理便显得尤为重要了。 本文主要深讨了图像的几何变换(主要包括图像的平移、转置、缩放、旋转、镜像等)理论,并在此基础上用Visual C++实现的过程。 1.3.2研究方法 方法一: 利用Windows 本身就提供了一个API函数SetWorldTransForm来实现图片旋转、位移及其他变形,这个函数是对一个设备上下文DC进行操作,通过坐标转换来实现各种功能的。 方法二: 通过图像进行平移、旋转、转置、镜像、缩放后重新计算各点新像素完成几何变换。自定义一个图像处理的Cdibapi类,把一般处理图像时要用到的函数实现封装在这个类中,该类用于实现DIB对象的绘制,DIB对象调色板的创建,DIB对象的读取与存储,图像线性变换,图像灰度拉伸等。然后把在视类中实现图像平移,图像镜像,图像转置,图像缩放及图像旋转的函数调用和实现。

计算机图形学 直线的生成算法的实现

实验二 直线的生成算法的实现 班级 08信计2班 学号 59 姓名 分数 一、实验目的和要求 1.理解直线生成的基本原理。 2.掌握几种常用的直线生成算法。 3.利用Visual C++实现直线生成的DDA 算法。 二、实验内容 1.了解直线的生成原理,尤其是Bresenham 画线法原理。 2.掌握几种基本的直线生成算法:DDA 画线法、Bresenham 画线法、中点画线法。 3.利用Visual C++实现直线生成的DDA 算法,在屏幕上任意生成一条直线。 三、实验步骤 1.直线的生成原理: (1)DDA 画线法也称数值微分法,是一种增量算法。是一种基于直线的微分方程来生成直线的方法。 (2)中点画线法原理 以下均假定所画直线的斜率[0,1]k ∈,如果在x 方向上的增量为1,则y 方向上的增量只能在01 之间。中点画线法的基本原理是:假设在x 坐标为p x 的各像素点中,与直线最近者已经确定为(,)p p P x y ,用小实心圆表示。那么,下一个与直线最近的像素只能是正右方的1(1,)p p P x y +,或右上方的2(1,1)p p P x y ++,用小空心圆表示。以M 为1P 和2P 的中点,则M 的坐标为(1,0.5)p p x y ++。又假设Q 是理想直线与垂直线1p x x =+的交点。显然,若M 在Q 的下方,则2P 离直线近,应取2P 为下一像素点;若M 在Q 的上方,则1P 离直线近,应取1P 为下一像素点。 (3)B resenham 画线法原理 直线的中点Bresenham 算法的原理:每次在主位移方向上走一步,另一个方向上走不走步取决于中点偏差判别式的值。 给定理想直线的起点坐标为P0(x0,y0),终点坐标为P1(x1,y1),则直线的隐函数方程为: 0b kx y y)F(x,=--= (3-1) 构造中点偏差判别式d 。 b x k y y x F y x F d i i i i M M -+-+=++==)1(5.0)5.0,1(),(

计算机图形学 图形几何变换的实现

计算机图形学图形几何变换的实现

————————————————————————————————作者:————————————————————————————————日期:

实验五图形几何变换的实现 班级08信计2 学号89姓名徐阳分数 一、实验目的和要求: 1、掌握理解二维、三维变换的数学知识、变换原理、变换种类、变换方法;进一步理解采用齐次坐标进行二维、三维变换的必要性;利用Turboc实现二维、三维图形的基本变换和复合变换。 二、实验内容: 1、理解采用齐次坐标进行图形变换的必要性——变换的连续性,使复合变换得以实现。 2、掌握二维、三维图形基本变换(平移、缩放、对称、旋转、错切)的原理及数学公式。 3、利用Turboc实现二维、三维图形的基本变换、复合变换,在屏幕上显示变换过程或变换结果。 三、实验结果分析: 程序代码如下: /*二维图形(直线)平移变换*/ #include #include #include main() {int x0,y0,x1,y1,i,j; int a[3][3]; char key; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]=0; for(i=0;i<3;i++) a[i][i]=1; int graphdriver=DETECT; int graphmode=0; initgraph(&graphdriver,&graphmode," "); cleardevice(); x0=250;y0=120;x1=350;y1=220; line(x0,y0,x1,y1); for( ; ;) {outtextxy(100,400,"<-:left->:right^:up v:down Esc->exit"); key=getch();

平面几何图形的画法

平面几何图形的画法 按照能否通用,平面几何图形大致可以分为两类:一类是没有具体尺寸要求的相交线、平行线、角、三角形、四边形等等;另一类则是需要符合题目条件与结论,或有严格尺寸要求的图形。无论哪一类,都可以凭借Word页面的“绘图工具”画出来,再利用Windows自带的“画图”程序进行编辑。下面举两例予以说明,敬请同仁赐教。 例1、如图,在三角形纸片ABC中,∠C=90°,∠A=30°,AC=3,折叠该纸片,使点A 与点B重合,折痕与AB,AC分别相交于点D,E,求折痕DE的长。 〖画法〗: 1、点击“插入”→“形状”,选择直线形,插入一条水平直线和一条竖直直线,如图(1); 2、右击直线,选“设置对象格式”,如图(2); 3、在“颜色与线条”里,将两条直线均设置为黑色、0.75磅,如图(3); 4、将水平直线复制成3条,如图(4);

5、右击其中一条水平直线,在“设置对象格式”→“大小”→“旋转”右框内,输入数字“30”,如图(5);这时所选直线顺时针旋转30°,如图(6); 6、再选择一条水平直线,将其顺时针旋转60°,如图(7),图(8); 7、插入一条水平直线,设置为黑色、0.75磅,并顺时针旋转120°,如图(9); 8、按住“Ctrl”键依次点击排列好的每条直线,在“图片工具”里选择“组合”,并且“另存图片”到某个文件夹,如图(10);

9、在Windows自带的“画图”程序中打开图片,如图(11); 10、用“橡皮”工具擦掉图形中多余的部分,如图(12); 11、用“铅笔”工具添加直角符号,并用“铅笔”工具将部分实线改成虚线,如图(13); 12、用“画图”程序中的文本工具给图形各点添加大写字母,如图(14); 13、剪切图片,另存到文件夹,如图(15);

图形与几何变换.doc

图形与变换 一、考点综述 考点内容: (1)图形的轴对称 (2)图形的平移 (3)图形的旋转 (4)图形相似变换 考纲要求: 1理解轴对称及轴对称图形的联系和区别; 2掌握轴对称的性质;根据要求正确地作出轴对称图形。 3理解图形的平移性质; 4会按要求画出平移图形; 5会利用平移进行图案设计。 6理解图形旋转的有关性质; 7掌握基本中心对称图形; 8会运用轴对称、平移和旋转的组合进行图案设计 9掌握按耍求作出简单平面图形经相似变换后的图形。 考查方式及分值: 近年全国各地的中考数学试题出现了不少有关图形变换的试题.这些试题以新课程标准的内容和要求为依据,注重对数学知识的理解,技能的掌握综合应用能力的检测,积极推进素质教育和数学创新思维培养,中考中考查的内容丰富,形式多样,题型涉及选择题、填空题、作图题和解答题等,其中尤以选择题居多,填空题相对较少,所占分值在3"0分,在选择、填空、解答题中都有出现,图案的设计常在作图题中出现。 备考策略: 加强了对学生实验操作、读图作图、合情推理等能力的耍求,强化对图形变换的训练, 适当渗透空间观念,侧重数学思想方法以及运用几何知识解决实际问题能力。 二、例题精析 例1、如图1,在直线/上摆放有AABC和宜角梯形DEFG,且CD = 6 cm;在左ABC中:ZC = 90°, ZA=30°, AB = 4 cm;在直角梯形DEFG 中:EF//DG, ZDGF=90°, DG=6 cm, DE = 4cm, ZEDG = 60° 解答下列问题: o (1)旋转:将AABC绕点C顺时针方向旋转90°,请你在图中作出旋转后的对应图形 △ABC,并求出AB】的长度; (2)翻折:将沿过点Bi且与直线/垂直的直线翻折,得到翻折后的对应图形

计算机图形学 圆周算法的实现

《计算机图形学实验报告》样例 实验名称:圆周画法的实现 1.实验内容 1.画出圆心坐标为(75,90)和半径为50的红色圆周 2.画出圆心坐标为(‐40,‐80)和半径为60的蓝色圆周 2.程序的基本思路和功能 先用MFC构建界面外观,然后在相应位置分别用Bresenham和DDA编辑画圆的程序然后编译运行。 3.关键代码及说明 void Circle::circleMinPoint(CDC* pDC) { xCenter = (float)(400 + x); yCenter = (float)(300 - y); //绘制圆心 drawCenter(pDC); //r = 50; //设置颜色 color = RGB(red,green,blue); float m_x = 0; float m_y = r; float d = 1.25 - r; circlePoint(m_x,m_y,pDC);

while(m_x <= m_y){ if(d<=0){ d = d + 2 * m_x + 3; }else{ d = d + 2 * ( m_x - m_y ) + 5; m_y = m_y - 1; } m_x = m_x + 1; circlePoint(m_x,m_y,pDC); } } void Circle::circleBresenham(CDC* pDC) { //确认圆心坐标 xCenter = (float)(400 + x); yCenter = (float)(300 - y); //绘制圆心 drawCenter(pDC); //r = 50; //设置颜色 color = RGB(red,green,blue); float m_x = 0; float m_y = r;

计算机图形学常用算法及代码大全

2.1.1 生成直线的DDA算法 数值微分法即DDA法(Digital Differential Analyzer),是一种基于直线的微分方程来生成直线的方法。 一、直线DDA算法描述: 设(x1,y1)和(x2,y2)分别为所求直线的起点和终点坐标,由直线的微分方程得 可通过计算由x方向的增量△x引起y的改变来生成直线: 也可通过计算由y方向的增量△y引起x的改变来生成直线: 式(2-2)至(2-5)是递推的。 二、直线DDA算法思想: 选定x2-x1和y2-y1中较大者作为步进方向(假设x2-x1较大),取该方向上的增量为一个象素单位(△x=1),然后利用式(2-1)计算另一个方向的增量(△y=△x·m=m)。通过递推公式(2-2)至(2-5),把每次计算出的(x i+1,y i+1)经取整后送到显示器输出,则得到扫描转换后的直线。 之所以取x2-x1和y2-y1中较大者作为步进方向,是考虑沿着线段分布的象素应均匀,这在下图中可看出。 另外,算法实现中还应注意直线的生成方向,以决定Δx及Δy是取正值还是负值。 三、直线DDA算法实现: 1、已知直线的两端点坐标:(x1,y1),(x2,y2) 2、已知画线的颜色:color 3、计算两个方向的变化量:dx=x2-x1 dy=y2-y1 4、求出两个方向最大变化量的绝对值: steps=max(|dx|,|dy|) 5、计算两个方向的增量(考虑了生成方向): xin=dx/steps

yin=dy/steps 6、设置初始象素坐标:x=x1,y=y1 7、用循环实现直线的绘制: for(i=1;i<=steps;i++) { putpixel(x,y,color);/*在(x,y)处,以color色画点*/ x=x+xin; y=y+yin; } 五、直线DDA算法特点: 该算法简单,实现容易,但由于在循环中涉及实型数的运算,因此生成直线的速度较慢。 //@brief 浮点数转整数的宏 实现代码 #define FloatToInteger(fNum) ((fNum>0)?static_cast(fNum+0.5):static_cast(fNum-0.5)) /*! * @brief DDA画线函数 * * @param pDC [in]窗口DC * @param BeginPt [in]直线起点 * @param EndPt [in]直线终点 * @param LineCor [in]直线颜色 * @return 无 */ void CDrawMsg::DDA_DrawLine(CDC *pDC,CPoint &BeginPt,CPoint &EndPt,COLORREF LineCor) { l ong YDis = (EndPt.y - BeginPt.y); l ong XDis = (EndPt.x-BeginPt.x); l ong MaxStep = max(abs(XDis),abs(YDis)); // 步进的步数 f loat fXUnitLen = 1.0f; // X方向的单位步进 f loat fYUnitLen = 1.0f; // Y方向的单位步进

计算机图形学--图形几何变换的实现

实验五:图形几何变换的实现 班级08信计2 学号83 姓名王志超分数 一、实验目的和要求: 巩固所学理论知识,加深对二维变换的理解,加深理解利用变换矩阵可由简单图形得到复杂图形。加深对变换矩阵算法的理解。 编制利用旋转变换绘制齿轮的程序。编程实现变换矩阵算法,绘制给出形体的三视图。调试程序及分析运行结果。要求每位学生独立完成该实验,并上传实验报告。 二、实验内容: 在方向、尺寸和形状方面的变换是用改变对象坐标描述的几何变换来完成的。基本几何变换都是相对于坐标原点和坐标轴进行的几何变换,有平移、旋转、缩放、反射、错切等。 用直线命令画出一个齿(或六边形的一半)→利用旋转变换或对称变换矩阵实现对其余部分的绘制→调试运行程序→输出图形→分析结果→结束。 编写三维变换算法程序→检查程序的正确性→分段调试程序→输入给出的三维形体各顶点的坐标→执行变换→对算法程序进行必要的调整→更换不同的形体数据继续变换→结束。 三、实验结果分析 . 1该程序实现了图形变换的实现。 2绘制图形,加强对知识的理解。/*二维图形(直线)平移变换*/ #include #include #include main() {int x0,y0,x1,y1,i,j; int a[3][3]; char key; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]=0; for(i=0;i<3;i++) a[i][i]=1; int graphdriver=DETECT; int graphmode=0; initgraph(&graphdriver,&graphmode," "); cleardevice(); x0=250;y0=120;x1=350;y1=220; line(x0,y0,x1,y1);

图像几何变换

图像几何变换 一、实验目的 (1)学习几种常见的图像几何变换,并通过实验体会几何变换的效果; (2)掌握图像平移、剪切、缩放、旋转、镜像、错切等几何变换的算法原理及编 程实现 (3)掌握matlab编程环境中基本的图像处理函数 (4)掌握图像的复合变换 二、涉及知识点 (1)图像几何变换不改变图像像素的值,只改变像素所在的几何位置 (2)图像裁剪imcrop函数,语法格式为: B=imcrop(A);交互式用鼠标选取区域进行剪切 B=imcrop(A,[left top right bottom]);针对指定的区域[left top right bottom]进行剪切 (3)图像缩放imresize函数,语法格式为: B = imresize(A,m,method) 这里参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。 B = imresize(A,m,method)返回原图A的m倍放大的图像(m小于1时效果是 缩小)。 (4)图像旋转imrotate函数,语法格式为: B = imrot ate(A,angle,’crop’),参数crop用于指定裁剪旋转后超出图像的部分。 三、实验内容 (1)将图像hehua.bmp裁剪成200X200大小,并保存 (2)制作动画,将一幅图像逐渐向左上角平移移出图像区域,空白的地方用白色 填充 (3)利用剪切图像函数制作动画 (4)将图像分别放大1.5倍和缩小0.8倍,插值方法使用最近邻域法和双线性插 值法,对比显示图像。 (5)将图像水平镜像,再顺时针旋转45度,显示旋转后的图像。 (6)将图像分别进行水平方向30度错切,垂直方向45度错切,分别显示结果 具体实现: 1.将图像hehua.bmp裁剪成200X200大小,并保存 I=imread('hehua.bmp'); n=size(I); figure; subplot(1,2,1); imshow(I); title('原图'); I=double(I);

计算机图形学课程总结

计算机图形学报告 前言 计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。 其从狭义上是来说是一种研究基于物理定律、经验方法以及认知原理,使用各种数学算法处理二维或三维图形数据,生成可视数据表现的科学。广义上来看,计算机图形学不仅包含了从三维图形建模、绘制到动画的过程,同时也包括了对二维矢量图形以及图像视频融合处理的研究。由于计算机图形学在许多领域的成功运用,特别是在迅猛发展的动漫产业中,带来了可观的经济效益。另一方面,由于这些领域应用的推动,也给计算机图形学的发展提供了新的发展机遇与挑战。 计算机图形学的发展趋势包括以下几个方面: 1、与图形硬件的发展紧密结合,突破实时高真实感、高分辨率渲染的技术难点; 2、研究和谐自然的三维模型建模方法; 3、利用日益增长的计算性能,实现具有高度物理真实的动态仿真; 4、研究多种高精度数据获取与处理技术,增强图形技术的表现; 5、计算机图形学与图像视频处理技术的结合; 6、从追求绝对的真实感向追求与强调图形的表意性转变。 1、三维物体的表示 计算机图形学的核心技术之一就是三维造型三维物体种类繁多、千变万化,如树、花、云、石、水、砖、木板、橡胶、纸、大理石、钢、玻璃、塑料和布等等。因此,不存在描述具有上述各种不同物质所有特征的统一方法。为了用计算机生成景物的真实感图形,就需要研究能精确描述物体特征的表示方法。根据三维物体的特征,可将三维物体分为规则物体和非规则物体两类。 三维实体表示方法通常分为两大类:边界表示和空间分割表示,尽管并非所有的表示都能完全属于这两类范畴中的某一类。边界表示(B-reps)用一组曲面来描述三维物体,这些曲面将物体分为内部和外部。边界表示的典型例子是多边形平面片和样条曲面。空间分割表示(Space-Partitioning)用来描述物体内部性质,将包含一物体的空间区域分割为一组小的、非重叠的、连续实体(通常是立方体)。三维物体的一般空间分割描述是八叉树表示。本章主要介绍三维物体的各种表示方法及其特点。

计算机图形学裁剪算法

一、实验目标 1.了解Cohen-SutherLand线段裁剪算法、Liang-Barsky线段裁剪算法、SutherLand-Hodgeman多边形裁剪算法的基本思想; 2.掌握Cohen-SutherLand线段裁剪算法、Liang-Barsky线段裁剪算法、SutherLand-Hodgeman多边形裁剪算法的算法实现; 二、实验内容 本次实验主要是实现Cohen-SutherLand线段裁剪算法、Liang-Barsky线段裁剪算法、SutherLand-Hodgeman多边形裁剪算法。 Cohen-sutherland线段裁剪算法思想: 该算法也称为编码算法,首先对线段的两个端点按所在的区域进行分区编码,根据编码可以迅速地判明全部在窗口内的线段和全部在某边界外侧的线段。只有不属于这两种情况的线段,才需要求出线段与窗口边界的交点,求出交点后,舍去窗外部分。 对剩余部分,把它作为新的线段看待,又从头开始考虑。两遍循环之后,就能确定该线段是部分截留下来,还是全部舍弃。 Cohen-sutherland线段裁剪算法步骤: 1、分区编码 延长裁剪边框将二维平面分成九个区域,每个区域各用一个四位二进制代码标识。各区代码值如图中所示。 四位二进制代码的编码规则是: (1)第一位置1:区域在左边界外侧

(2)第二位置1:区域在右边界外侧 (3)第三位置1:区域在下边界外侧 (4)第四位置1:区域在上边界外侧 裁剪窗口内(包括边界上)的区域,四位二进制代码均为0。 设线段的两个端点为P1(x1,y1)和P2(x2,y2),根据上述规则,可以求出P1和P2所在区域的分区代码C1和C2。 2、判别 根据C1和C2的具体值,可以有三种情况: (1)C1=C2=0,表明两端点全在窗口内,因而整个线段也在窗内,应予保留。 (2)C1&C2≠0(两端点代码按位作逻辑乘不为0),即C1和C2至少有某一位同时为1,表明两端点必定处于某一边界的同一外侧,因而整个线段全在窗外,应予舍弃。 (3)不属于上面两种情况,均需要求交点。 3、求交点 假设算法按照:左、右、下、上边界的顺序进行求交处理,对每一个边界求完交点,并相关处理后,算法转向第2步,重新判断,如果需要接着进入下一边界的处理。 为了规范算法,令线段的端点P 1为外端点,如果不是这样,就需要P 1 和P 2 交换端点。 当条件(C1&0001≠0)成立时,表示端点P1位于窗口左边界外侧,按照求交公式,进行对左边界的求交运算。 依次类推,对位于右、下、上边界外侧的判别,应将条件式中的0001分别改为0010、0100、1000即可。 求出交点P后,用P1=P来舍去线段的窗外部分,并对P1重新编码得到C1,接下来算法转回第2步继续对其它边界进行判别。 Liang-Barsky线段裁剪算法思想: 我们知道,一条两端点为P1(x1,y1)、P2(x2,y2)的线段可以用参数方程形式表示: x= x1+ u·(x2-x1)= x1+ u·Δx y= y1+ u·(y2-y1)= y1+ u·Δy0≤u≤1式中,Δx=x2-x1,Δy=y2-y1,参数u在0~1之间取值,P(x,y)代表了该线段上的一个点,其值由参数u确定,由公式可知,当u=0时,该点为P1(x1,y1),当u=1时,该点为P2(x2,y2)。如果点P(x,y)位于由坐标(xw min,

计算机图形学-作业答案-几何变换

几何变换:作业共10题,每题10分,总分100分 1. 有如下使用矩阵表示的三维几何变换: ???? ????????????????-=??????????z y x z y x 100001010''' 辅助说明(不计成绩): 1)3*3矩阵的3个列向量与3个行向量分别形成两个基向量集,即两个坐标系,这里分别称为列坐标系与行坐标系。 2)在矩阵中,列坐标系中各基向量(矩阵的3个列向量)的坐标是在假定行坐标系为单位正交坐标系(基向量的模为1,且基向量两两正交)前提下,由行坐标系测量的坐标;相似地,行坐标系中各基向量(矩阵的3个行向量)的坐标是在假定列坐标系为单位正交坐标系的前提下,由列坐标系测量的坐标。 3)对于此题给出的矩阵,假定行坐标系单位正交,则测量出的列坐标系也单位正交;反之,假定列坐标系单位正交,则测量出的行坐标系也单位正交;此矩阵描述的是两个单位正交坐标系间的坐标系变换,矩阵是一个单位正交阵(旋转矩阵)。 (1) 试解释其中的一种运算:???? ? ?????+??????????-+???? ? ?????=???? ? ?????100001010'''z y x z y x ; 答: 1)使用考察向量在列坐标系下测量的坐标作为系数(线性组合中的各个系数x 、 y 、z 用于调节各列基向量的模,实质上这些系数是坐标变换前,考察向量在列 坐标系下测量的坐标,否则这样的线性组合运算无意义),对矩阵中列坐标系的3个基向量实施线性组合,重新组合为考察向量后(这里理解为向量不变,坐标系、坐标变化),其坐标变换为行坐标系下测量的坐标; 2)此运算的含义是已知考察向量的列坐标系坐标,以坐标和基向量(矩阵中的列)为基础,使用线性组合得到考察向量;(简言之,由坐标计算得到向量) 3)由于3个基向量的坐标为行坐标系下的坐标,则组合后的组合向量坐标亦为行坐标系下的坐标,由此,考察向量的坐标从列坐标系坐标变换到行坐标系坐

计算机图形学 第五章 图形变换

第五章图形变换 重 点:掌握二维几何变换、二维观察变换、三维几何变换以及三维观察变换。 难 点:理解常用的平移、比例、旋转变换,特别是复合变换。 课时安排:授课4学时。 图形变换包括二维几何变换,二维观察变换,三维几何变换和三维观察变换。为了能使各种几何变换(平移、旋转、比例等)以相同的矩阵形式表示,从而统一使用矩阵乘法运算来实现变换的组合,现都采用齐次坐标系来表示各种变换。 齐次坐标系 齐次坐标系:n维空间中的物体可用n+1维齐次坐标空间来表示。例如二维空间直线 ax+by+c=0,在齐次空间成为aX+bY+cW=0,以X、Y和W为三维变量,构成没有常数项的三维平面(因此得名齐次空间)。点P(x、y)在齐次坐标系中用P(wx,wy,w)表示,其中W是不为零的比例系数。所以从n维的通常空间到n+1维的齐次空间变换是一到多的变换,而其反变换是多到一的变换。例如齐次空间点P(X、Y、W)对应的笛卡尔坐标是x=X/W和y=Y/W。将通常笛卡尔坐标用齐次坐标表示时,W的值取1。 采用齐次坐标系可以将平移、比例、旋转这三种基本变换都以相同的矩阵形式来表示,并统一地用矩阵乘法来实现变换的组合。 齐次坐标系在三维透视变换中有更重要的作用,它使非线形变换也能采用线形变换的矩阵表示形式。

5.1 二维几何变换 二维几何变换就是在平面上对二维点的坐标进行变换,从而形成新的坐标。 二维几何变换主要包括:平移、比例、旋转、对称、错切、仿射和复合变换。 5.1.1 二维平移变换 如图所示,它使图形移动位置。新图p'的每一图元点是原图形p中每个图元点在x和y方向分别移动Tx和Ty产生,所以对应点之间的坐标值满足关系式 x'=x+Tx y'=y+Ty 可利用矩阵形式表示成: [x' y']=[x y]+[Tx Ty] 简记为:P'=P+T,T=[Tx Ty]是平移变换矩阵(行向量)。

相关文档
相关文档 最新文档