二维图形的矩阵变换(一)——基本概念

原文:二维图形的矩阵变换(一)——基本概念

基本的二维变换可包括旋转、缩放、扭曲,和平移四种,

                    

而这些几何运算则可以转换为一些基本的矩阵运算:

    

这几个变换都是线性的,但平移运算不是线性的,不能通过2*2矩阵运算完成。若要将点 (2, 1)在 x 方向将其平移 3 个单位,在 y 方向将其平移 4 个单位。 可通过先使用矩阵乘法再使用矩阵加法来完成此操作。

    

综合这几种基本运算,数学家们将其统一为一个3*3矩阵,存储形式如下:

    

由于表示仿射变换的矩阵的第三列总是(0,0,1),在存储矩阵的时候,大多只存成一个2*3的数组。

 

变换的原点

二维变换的参考点是非常重要的,例如如下旋转的结果就大不相同:

        

当然,有一种特殊的变换除外。那就是平移变换,无论原点是什么其变换的结果都是没有变化的。

 

复合变换

复合变换的矩阵可通过将几个单独的变换矩阵相乘而得到,这就意味着任何仿射变换的序列均可存储于单个的 Matrix 对象中。

    

需要注意的是,复合变换是有顺序的,一般说来,先旋转、再缩放、然后平移,与先缩放、再旋转、然后平移是不同的。

 

逆矩阵

可以根据一定的运算求出某个矩阵的逆矩阵,这个矩阵可以用来求出新的坐标点在原坐标系的位置。但需要注意的是,并非所有矩阵都是可逆的,可逆矩阵要求是非奇异矩阵

 

在线预览

微软有一个几何变换的在线预览的页面,可以非常直观的帮助我们理解这些变换,感兴趣的朋友不妨试试。

http://ie.microsoft.com/testdrive/Graphics/hands-on-css3/hands-on_2d-transforms.htm

 

小结

矩阵运算其实是非常基础的数学知识,在图形学中应用得还是非常广泛的,但大学学的时候往往不知道干嘛用,现在用的时候却又忘了啥原理了。本文这里只是介绍了一些矩阵运算的基本概念,具体详细的内容可以参考下下面的这些参考资料。下一篇文章再简单的介绍一下矩阵变换的实际使用。

 

参考资料:

  1. http://msdn.microsoft.com/zh-cn/library/8667dchf(v=vs.110).aspx
  2. http://msdn.microsoft.com/zh-cn/library/ms750596(v=vs.110).aspx
  3. http://www.zhangxinxu.com/wordpress/2012/06/css3-transform-matrix-%E7%9F%A9%E9%98%B5/
  4. http://netclass.csu.edu.cn/NCourse/hep089/Chapter6/CG_Txt_6_011.htm
  5. http://www.zhangxinxu.com/wordpress/2012/06/css3-transform-matrix-%E7%9F%A9%E9%98%B5/
时间: 2024-08-31 03:16:10

二维图形的矩阵变换(一)——基本概念的相关文章

二维图形的矩阵变换(三)——在WPF中的应用矩阵变换

原文:二维图形的矩阵变换(三)--在WPF中的应用矩阵变换 UIElement和RenderTransform 首先,我们来看看什么样的对象可以进行变换.在WPF中,用于呈现给用户的对象的基类为Visual类,但是Visual对象并不具有变换功能,具有变换功能的是它的子类UIElement.这个类也是非常底层的类了,几乎我们所有的常用控件都是继承自它,也就是说,基本上所有的UI对象都是可以应用变换的. 然后,我们在再来看看UIElement中变换种类.UIElement支持两种变换:Render

二维图形的矩阵变换(二)——WPF中的矩阵变换基础

原文:二维图形的矩阵变换(二)--WPF中的矩阵变换基础 在前文二维图形的矩阵变换(一)--基本概念中已经介绍过二维图像矩阵变换的一些基础知识,本文中主要介绍一下如何在WPF中进行矩阵变换.   Matrix结构 在WPF中,用Matrix结构(struct类型)表示二维变换矩阵,它是一个3*3的数组,结构如下,      由于第三列是常量0,0,1,因此并不作为公开属性,可见的只有剩余六个属性.   构造变换 虽然Matrix类公开了这六个属性让我们设置,但是靠直接设置这六个属性来实现平移.旋

Android简明开发教程八:引路蜂二维图形绘制实例功能定义

有了前面对Android平台的介绍,基本上可以开始编写Android应用了,这里将以绘制二维图形为例,对Android开发的一般方 法做过介绍,其中涉及到自定义Application类,扩展View,Intent定义,发送消息,Data Binding(Adapter),和基本UI设计 .示例没有使用Android平台自带的二维图形API,而是调用了引路蜂二维图形库,引路蜂二维图形库Graphics 2D API实现了移 动平台上图形引擎,它能够以一种统一的方式处理各种基本图形(Shape),路

matlab中绘制二维图形

  matlab中有时为了看清方程,更加系统的了解方程,常常需要画图表达,那么为了绘制二维图形就需要了解matlab中常用的图形功能,下面介绍一下matlab中的二维图形功能. plot(x) ------------根据向量绘制二维曲线,例如: x=[1,2,3,5,4,3.5,2,0]; plot(x) plot(x,y)------------根据向量x,y绘制二维图形; 在matlab中利用plot(x,y)绘制y=2x^2(0<=x<=10)d的图形 x=linspace(0,10,

C++实现二维图形的傅里叶变换_C 语言

本文实例讲述了C++实现二维图形的傅里叶变换的方法.有一定的借鉴价值.分享给大家供大家参考. 具体代码如下: // Fourier.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "stdio.h" #include "math.h" #include <cv.h> #include <highg

二维图形基本变换-c程序转换为java程序,最好用图形界面实现

问题描述 c程序转换为java程序,最好用图形界面实现 #include #include #define N 50 #define M 3.14159265 void erwei(); void sanwei(); void main() { int w; printf("请输入是几维图形变换:二维(2)或三维(3): "); scanf_s("%d", &w); if(w == 2) erwei(); else if(w == 3) sanwei();

《MATLAB图像处理375例》——第2章 MATLAB图形的可视化 2.1 二维绘图

第2章 MATLAB图形的可视化 MATLAB图像处理375例数据可视化是MATLAB一项重要的功能.MATLAB所提供的丰富绘图功能,使得工程科研人员从繁琐的绘图细节中脱离出来,并专注于最关心的本质.通过数据可视化的方法,工程科研人员可以对样本数据的分布.趋势特性有一个直观的了解. 2.1 二维绘图 MATLAB图像处理375例在MATLAB中绘制二维图形,通常采用以下步骤. (1)准备数据. (2)设置当前绘图区. (3)绘制图形. (4)设置图形中曲线和标记点格式. (5)设置坐标轴和网格

Android简明开发教程十二:引路蜂二维图形库简介及颜色示例

AndroidGraphics2DTutorial定义了应用的主Activity,下面就可以开始写每个具体的二维绘图示例.不同的例子将尽量采用 不同的UI控件:Menu,Content Menu,Dialog,Custom Dialog,Button等等.例子采用了引路蜂二维图形库,引路蜂二维图形 库Graphics 2D API实现了移动平台(Java ME,Blackberry,iPhone,Android,Windows Phone)上图形引擎,它能够以一种统一的方 式处理各种基本图形(S

Agg vs. Cairo 二维绘图引擎之比较和选择 .

Agg vs. Cairo 二维绘图引擎之比较和选择 cheungmine 当今时代对于作为二维图形软件开发者, 是幸运的.因为除了Windows GDI/GDI+之外,我们还有很多其他的选择.而且这些选择除了能跨平台之外,性能上与原始GDI/GDI+相比,都不逊色. 如果不考虑绘图的效果,使用Win32 GDI函数直接绘图的效率大约是同样的GDI Plus的10倍以上.为了反走样的美观,只有牺牲效率了.老式的程序还在使用GDI绘图,不是这些程序不想提升到GDI+,可能这样改动的代码量太大,所谓