`

[转]矩阵的学习<3>

阅读更多

如果图像围绕着某个点P(a,b)旋转,则先要将坐标系平移到该点,再进行旋转,然后将旋转后的图像平移回到原来的坐标原点。

我们需要3步:

  1. 平移——将坐标系平移到点P(a,b);
  2. 旋转——以原点为中心旋转图像;
  3. 平移——将旋转后的图像平移回到原来的坐标原点;

相比较前面说的图像的几何变化(基本的图像几何变化),这里需要平移——旋转——平移,这种需要多种图像的几何变化就叫做图像的复合变化

设对给定的图像依次进行了基本变化F1、F2、F3…..、Fn,它们的变化矩阵分别为T1、T2、T3…..、Tn,图像复合变化的矩阵T可以表示为:T = TnTn-1…T1。

按照上面的原则,围绕着某个点(a,b)旋转θ的变化矩阵序列是:

Composite Change Matrix

按照上面的公式,我们列举一个简单的例子:围绕(100,100)旋转30度(sin 30 = 0.5 ,cos 30 = 0.866)
float f[]= { 0.866F,  -0.5F, 63.4F,0.5F, 0.866F,-36.6F,0.0F,    0.0F,  1.0F };
matrix = new Matrix();
matrix.setValues(f);
旋转后的图像如下:

Rotate-100-100-Android

Android为我们提供了更加简单的方法,如下:
Matrix matrix = new Matrix();
matrix.setRotate(30,100,100);
矩阵运行后的实际结果:
Rotate-30-100-100-Matrix
与我们前面通过公式获取得到的矩阵完全一样。

在这里我们提供另外一种方法,也可以达到同样的效果:
float a = 100.0F,b = 100.0F;
matrix = new Matrix();
matrix.setTranslate(a,b);
matrix.preRotate(30);
matrix.preTranslate(-a,-b);
将在后面的篇幅中为大家详细解析

通过类似的方法,我们还可以得到:相对点P(a,b)的比例[sx,sy]变化矩阵

P(a,b)-Scale

分享到:
评论

相关推荐

    智能控制及其MATLAB实现2005李国勇编著.part3.rar

    2.9 MATLAB神经网络工具箱的图形用户界面&lt;br&gt; 第3章 基于Simulink的神经网络控制系统&lt;br&gt; 3.1 基于Simulink的神经网络模块&lt;br&gt; 3.1.1 模块的设置&lt;br&gt; 3.1.2 模块的生成&lt;br&gt; 3.2 基于Simulink的三种典型神经网络...

    数据结构(C++)有关练习题

    &lt;br&gt;4、用邻接矩阵或邻接图实现一个有向图的存储,并实现单源最短路径算法的实现(这个类的一个成员函数),并能输出该图的关键路径。&lt;br&gt;注:1、要用面向对象的方法设计代码;&lt;br&gt;2、一个图是一个类的实例;&lt;br&gt;3、类...

    HTML5+Canvas漂亮的3D烟花动画特效

    在这个特效中,可能运用了CSS3的`transform`属性和Canvas的矩阵变换方法,比如`save()`、`restore()`用于保存和恢复当前的变换状态,`translate()`和`rotate()`组合应用,来实现地面的旋转和烟花在3D空间中的运动...

    数据结构实验:矩阵转置(c++)

    首先,我们需要包含必要的头文件,如`&lt;iostream&gt;`用于输入输出,`&lt;vector&gt;`用于使用C++标准库的动态数组(向量)来表示矩阵。然后,我们可以定义一个函数,接收一个二维向量作为参数,返回转置后的二维向量。在这个...

    c++计算三维点云rt矩阵转欧拉角

    在三维空间中,表示旋转的一种常见方式是使用欧拉角,它由三个旋转角度组成,通常用 yaw(偏航)、...通过对这些文件进行学习和实践,你可以深入理解旋转矩阵和欧拉角之间的转换,并掌握在C++中处理3D旋转的基本技巧。

    java生成二维码共2页.pdf.zip

    3. 将BitMatrix转换为图像:这一步将二进制矩阵转换成可视化的图像,可以是PNG、JPEG等格式。 ```java BufferedImage image = BitmapEncoder.createImage(bitMatrix, Color.WHITE, Color.BLACK); ImageIO.write...

    java生成二维码 经典 demo 案例

    &lt;artifactId&gt;core&lt;/artifactId&gt; &lt;version&gt;3.4.1&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;com.google.zxing&lt;/groupId&gt; &lt;artifactId&gt;javase&lt;/artifactId&gt; &lt;version&gt;3.4.1&lt;/version&gt; &lt;/dependency&gt; ``...

    简单制作樱花雨.txt

    2. **基本标签**:了解`&lt;html&gt;`、`&lt;head&gt;`、`&lt;title&gt;`、`&lt;meta&gt;`、`&lt;style&gt;`、`&lt;body&gt;`、`&lt;canvas&gt;`等标签的基本用法及含义。 ### 二、CSS样式设置 文档中的CSS代码负责页面的样式布局,包括去除默认的内边距和...

    二维码生成工具类.rar

    &lt;artifactId&gt;core&lt;/artifactId&gt; &lt;version&gt;3.4.1&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;com.google.zxing&lt;/groupId&gt; &lt;artifactId&gt;javase&lt;/artifactId&gt; &lt;version&gt;3.4.1&lt;/version&gt; &lt;/dependency&gt; ``...

    c++矩阵课程设计报告翻转矩阵

    矩阵在计算机科学中是一种重要的数据结构,特别是在图像处理、线性代数、机器学习等领域有着广泛的应用。本次课程设计的目标是实现矩阵的三种基本操作:矩阵翻转、矩阵卷动和矩阵旋转。这些操作对于理解和掌握矩阵的...

    利用SVG或VML在网页上实现3D的曲面效果

    例如,可以使用`&lt;svg&gt;`元素结合`&lt;path&gt;`、`&lt;polygon&gt;`或`&lt;rect&gt;`等元素来构造3D形状,并通过`transform`属性应用变换。 VML,全称为Vector Markup Language,是在SVG之前的一种矢量图形技术,主要在Internet ...

    矩阵模板类

    矩阵在科学计算、图像处理、机器学习等领域中扮演着核心角色。本篇文章将详细探讨“矩阵模板类”的实现及其相关的编程知识点。 首先,矩阵模板类的设计目标是提供一种高效且灵活的方式来存储和操作矩阵。模板类允许...

    HTML5交互式3D魔方游戏代码.zip

    它强化了网页的语义性,使得内容结构更加清晰,如`&lt;header&gt;`, `&lt;nav&gt;`, `&lt;section&gt;`, `&lt;article&gt;`等标签。此外,HTML5引入了画布元素(`&lt;canvas&gt;`),这为动态图形和游戏开发提供了可能。在这个3D魔方游戏中,`...

    html5全屏酷炫3D多边形背景动画特效.zip

    `&lt;canvas&gt;`元素提供了一个可编程的画布,允许通过JavaScript绘制2D和3D图形。 接下来,我们关注到"js"这个文件夹,其中的JavaScript文件负责实现动画效果。HTML5的`&lt;canvas&gt;`元素与JavaScript结合,可以创建动态、...

    C++的数组转换成矩阵

    3. **矩阵相乘原理**:两个矩阵相乘的前提条件是第一个矩阵的列数必须等于第二个矩阵的行数。计算结果矩阵的每个元素时,需要将第一个矩阵的行与第二个矩阵的列对应位置上的元素相乘后求和。 4. **嵌套循环结构**:...

    MathML包,网页上显示数学符号的方法

    MathML通过使用特定的元素和属性来表示矩阵和积分,比如`&lt;mtable&gt;`用于构建矩阵,而`&lt;mrow&gt;`和`&lt;mfrac&gt;`等元素则用来表示行和分数。`&lt;int&gt;`元素通常用于表示积分,结合`&lt;mi&gt;`(标识符)、`&lt;mn&gt;`(数字)和其他元素,...

    图片3D旋转

    1. **旋转矩阵**:每个轴的旋转都可以用一个2x2或3x3的旋转矩阵来表示,如绕X轴的旋转矩阵RX,绕Y轴的旋转矩阵RY和绕Z轴的旋转矩阵RZ。当对一个点应用多个旋转时,需要按照特定顺序(例如Z-Y-X顺序)乘以这些矩阵。 ...

    HILL加密解密程序C++

    4. **矩阵乘法**:实现矩阵乘法函数,如`std::vector&lt;std::vector&lt;int&gt;&gt; multiplyMatrices(std::vector&lt;std::vector&lt;int&gt;&gt;& m1, std::vector&lt;std::vector&lt;int&gt;&gt;& m2)`。 5. **加密**:对明文进行分块,然后用加密...

    c++\C++入门必做题

    根据提供的标题、描述以及部分内容,可以总结出一系列与C++编程相关的知识点,这些知识点主要集中... vector&lt;int&gt; wt = {1, 3, 4, 5}; vector&lt;int&gt; val = {1, 4, 5, 7}; int W = 7; cout &lt;&lt; knapsack(W, wt, val, 4...

    将卷积运算转换成矩阵相乘

    然而,在卷积运算中,卷积核(一个小型矩阵,通常是3×3或5×5)与一个较大的输入矩阵(如图像)相乘,但这里的“乘法”是在滑动窗口内进行的,而不是直接对齐的矩阵乘法。 卷积核在输入数据上的移动遵循一定的步长...

Global site tag (gtag.js) - Google Analytics