news 2026/4/15 22:33:54

games101学习:lecture3. Transformation

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
games101学习:lecture3. Transformation

大纲

这周要学习转换(Transformation),从三维世界到二维投影。

2D转换:rotation(旋转),scale(缩放),shear(切片)
齐次坐标的概念,以及为什么用它
多种不同的变换组合到一块形成一个新的变换
三维的变换

今天学习二维变幻
1.Representing transformations using matrices 使用矩阵表示变幻
2.rotation scale shear 旋转 缩放 切片

缩放:横轴和纵轴都缩放为原来的0.5倍。
1.一开始任何一个点的坐标是(x,y),经过一个缩放操作之后变为(x',y'),那可以理解为/* by 01130.hk - online tools website : 01130.hk/zh/regexsucha.html */ x' = sx/* by 01130.hk - online tools website : 01130.hk/zh/regexsucha.html */ y' = sy
,其中s=0.5
2.上面这两个十字也可以写为矩阵形式,x' = sxy' = sy写为

此时S = 0.5;这个【S 0 0 S】成为缩放矩阵,如果S 大于 1 的话,这个矩阵可以用于放大。

同理,想将图像对x进行缩放,可以进行这个操作。

同理,对称的操作

shear变换,切变。

y轴方向的值不发生改变,y=0的x不发生改变,然后y越大,x改变的越大,因此改变的量是x=ay,加上原本的量是x' = x + ay所以矩阵可以这么写。

写出一个变换,就是要找出变换后的y',x'和变换前的x,y之间的关系,然后乘一个矩阵即可。

旋转,绕着(0,0)旋转,逆时针为正方向。

那我们如何得到这个变换呢?手推公式一下。
我们知道,写出一个变换,就是要找出变换后的y',x'和变换前的x,y之间的关系,然后乘一个矩阵即可。那此时我们可以随机找两个点,就比如原图右下角的点和左上角的点。

右下角的(1,0)会变成( cos(theta) , sin(theta) )那这个就是一个变换前后的关系,可以通过这个关系去推导这个(A,B,C,D)的值。同理,左上角这个点也会满足。这两个特殊的点满足,其余点也会满足的。
最终可以得出A=cos(theta) B=-sin(theta) C=sin(theta) D=cos(theta)。

还是那句话,写出一个变换,就是要找出变换后的y',x'和变换前的x,y之间的关系,然后乘一个矩阵即可。
称之为线性变换

引入新概念,以上的线性变换要用一个相同维度的矩阵来乘向量,那不同纬度呢,引入一个定义叫做齐次坐标,Homogeneous coordinates,理解为什么要引入这个定义?因为我们要进行平移变换

看看这个平移变换,貌似挺简单的,但是很难以矩阵相乘的形式表达出来。

如果表示为这种形式不符合线性变换的定义,可以有一种统一的形式:齐次变换

二维的点可以加个1,二维的向量加个0,增加一个维度。(为什么要将向量和点区别对待呢?)
向量考虑的是方向性,其具有平移不变性。


point + point = 这两个点的中点,

可以实现加法,我想要的平移的变换!可以写成统一的一个矩阵 * 一个向量的形式了。

类似这种平移变换,为他起个名字,叫做affine transformations(仿射变换),线性变换的同时再加个平移。

用齐次坐标表示二维的仿射变换,最后一行永远都是0 0 1,平移一定都是写在最后一列的两个数上。

关于齐次坐标的缩放 旋转 平移的总结

Inverse Transform逆变换,进行一个操作乘的矩阵,然后将这个操作反回来所用的这个矩阵,这个操作是逆变换,这个矩阵是逆矩阵


需要注意的是,矩阵乘法不符合交换律,意思是你先进行平移变换,在进行旋转变换得到的结果肯定是不等于先进性旋转变换再进行平移变换得到的结果。**你想先进行什么操作,就先左乘一个矩阵,如图,(x,y,1)先进行旋转,再进行平移。

对这个矩阵先进行A1变换,再A2,再A3………就是一直左乘。

矩阵没有交换律,但是有结合律那么就可以将这些An …… A2 A1先乘到一块作为一个矩阵最后再和这个(x,y,1)进行相乘。

前面说到的旋转,都是以原点中心进行的旋转,那能不能以任意一个点进行旋转呢?变换不仅能进行合成(上面),还能进行分解。

如何以C为中心旋转,首先平移原图C的位置到原点,然后旋转,然后反转回去。
先左乘一个平移,再旋转,再平移。

二维的讲完了,到了三维。

三维空间也需要线性变换,它也需要旋转,缩放,平移等。

w不等于1,那就把x,y,z全都变成x/w,y/w,z/w的值,然后就变成了一个点。

先平移再线性变换还是先线性变换再平移呢?
先线性变换再平移

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 9:36:19

解锁GPT2-ML:强大的多语言预训练模型全解析

解锁GPT2-ML:强大的多语言预训练模型全解析 【免费下载链接】gpt2-ml GPT2 for Multiple Languages, including pretrained models. GPT2 多语言支持, 15亿参数中文预训练模型 项目地址: https://gitcode.com/gh_mirrors/gp/gpt2-ml GPT2-ML是一款基于GPT-2架…

作者头像 李华
网站建设 2026/4/14 15:07:01

Linux学习日记19:线程同步与互斥锁

一、前言 前面我们了解了线程的基础知识,而在多线程编程中,线程同步是核心技术,用于解决多线程并发访问共享资源时的竞态条件,保证数据一致性和线程执行顺序的可控性;互斥锁就是线程同步的其中一种机制。 二、线程同步…

作者头像 李华
网站建设 2026/4/8 21:56:26

pywebview与React桌面应用开发实战:5个关键问题与架构解决方案

pywebview与React桌面应用开发实战:5个关键问题与架构解决方案 【免费下载链接】pywebview Build GUI for your Python program with JavaScript, HTML, and CSS 项目地址: https://gitcode.com/gh_mirrors/py/pywebview 厌倦了在Python桌面应用中平衡功能性…

作者头像 李华
网站建设 2026/4/15 13:39:12

LOOT插件管理器完整使用指南:从入门到精通

LOOT插件管理器完整使用指南:从入门到精通 【免费下载链接】loot A modding utility for Starfield and some Elder Scrolls and Fallout games. 项目地址: https://gitcode.com/gh_mirrors/lo/loot LOOT是一款专为《星空》、《上古卷轴》系列和《辐射》系列…

作者头像 李华
网站建设 2026/4/14 22:12:37

大模型强化学习:GRPO超级无敌深度剖析,看完即高手

前言:GRPO 宏观视角1. 为什么我们需要 GRPO?(Motivation)在DeepSeek-Math和DeepSeek-R1等前沿工作中,GRPO被证明是一种极其高效的强化学习算法。要理解它,我们必须先看一眼它的前辈——PPO (Proximal Polic…

作者头像 李华