【GAMES101】Lecture03 Transformation 变换

目录

  • 0 课程内容
  • 1 Why Study Transformation
    • 1.1 Modeling 模型变换
    • 1.2 Viewing 视图变换
  • 2 2D Transformations 二维变换
    • 2.1 Scale 缩放变换
    • 2.2 Reflection Matrix 反射矩阵
    • 2.3 Shear Matrix 切变矩阵
    • 2.4 Rotate 旋转
    • 2.5 特点:线性变换可以用矩阵表示(Linear Transforms = Matrix)
  • 3 齐次坐标系(Homogeneous Coordinate)
    • 3.1 为什么要引入齐次坐标
    • 3.2 Affine Transformation仿射变换
    • 3.3 2D Transformations 引入齐次坐标后的二维变换
  • 4 Other Transformation
    • 4.1 Inverse Transformation 逆变换
    • 4.2 Composite Transform 变换组合
    • 4.3 Decomposing Complex Transforms 分解复杂变换
  • 5 3D Transforms三维变换

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:计算机图形学专栏
  • 💥 标题:【GAMES101】Lecture03 Transformation 变换
  • ❣️ 寄语:对知识永远有兴趣!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正

0 课程内容

  1. 为什么学习变换
  2. 二维变换:旋转、缩放、切变
  3. 齐次坐标系
  4. 组合变换
  5. 三维变换

在这里插入图片描述

1 Why Study Transformation

1.1 Modeling 模型变换

在这里插入图片描述
在这里插入图片描述

1.2 Viewing 视图变换

在这里插入图片描述

2 2D Transformations 二维变换

2.1 Scale 缩放变换

每个点的坐标都被缩放了 S 倍。

在这里插入图片描述
写成矩阵形式:下图中的对角矩阵是缩放矩阵
在这里插入图片描述
非均匀的缩放
在这里插入图片描述

2.2 Reflection Matrix 反射矩阵

在这里插入图片描述

2.3 Shear Matrix 切变矩阵

Y坐标没有发生变换,只有X坐标改变, X' = X + aY

在这里插入图片描述

2.4 Rotate 旋转

如果不给其他信息,默认旋转就是围绕着 (0,0) 点旋转,旋转方向是逆时针方向。
下图是一个边长为1的图像:

在这里插入图片描述

2.5 特点:线性变换可以用矩阵表示(Linear Transforms = Matrix)

前提:相同纬度

在这里插入图片描述

3 齐次坐标系(Homogeneous Coordinate)

3.1 为什么要引入齐次坐标

因为平移变换(不属于线性变换)比较特殊,看起来很简单,但是无法表示为矩阵形式

在这里插入图片描述


在这里插入图片描述


解决办法:引入齐次坐标系。

增加一个维度,二维点用三个维度来表示。这样就可以用矩阵来表示平移变换了。

为什么二维点,第三个维度是1,但是二维向量,第三个维度是0。
因为向量具有平移不变性。

在这里插入图片描述
在这里插入图片描述

3.2 Affine Transformation仿射变换

仿射变换 = 线性变换 + 平移
可以使用齐次坐标表示,这样只需要一个矩阵。

在这里插入图片描述

3.3 2D Transformations 引入齐次坐标后的二维变换

代价就是:空间复杂度增加了

在这里插入图片描述

4 Other Transformation

4.1 Inverse Transformation 逆变换

逆变换。

在这里插入图片描述

4.2 Composite Transform 变换组合

在这里插入图片描述
先平移再旋转:失败了
在这里插入图片描述
先旋转再平移:成功(矩阵操作是没有交换律的)

在这里插入图片描述
在这里插入图片描述

4.3 Decomposing Complex Transforms 分解复杂变换

下图中,如果图像想围绕左下角进行旋转,而不是围绕坐标原点旋转。
那么我们可以把这个复杂的变换拆解:

  1. 先把图像移动到原点
  2. 然后把图像绕原点旋转
  3. 然后再把图像移动回去

在这里插入图片描述

5 3D Transforms三维变换

使用二维变换做类比,只不过多了一个维度

在这里插入图片描述
在这里插入图片描述
先应用线性变换,再平移:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/440092.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

量化投资实战(三)之配对交易策略--协整模型法

点赞、关注,养成良好习惯 Life is short, U need Python 量化投资实战系列,不断更新中 1. 初识配对交易策略 配对交易(Pairing Trading)是指八十年代中期华尔街著名投行Morgan Stanley的数量交易员Nunzio Tartaglia成立的一个数量…

【MQ】消息队列概述

📝个人主页:五敷有你 🔥系列专栏:MQ ⛺️稳中求进,晒太阳 定义 消息队列:一般我们简称为MQ(Message Queue) Message Queue :消息队列中间件,很多初学者认为,MQ通过消息的发送…

C++:string的介绍

C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合面向对象的思想,而且底层空间需要用户自己管理,稍不留…

RocketMQ如何保证消息的顺序性?

和Kafka只支持同一个Partition 内的消息的顺序性一样,RocketMQ中的也提供了基于队列(分区)的顺序消费。即同一个队列内的消息可以做到有序,但是不同队列内的消息是无序的! 当我们作为MQ生产者需要发送顺序消息时,需要在send方法中,传入一个MessageQueueSelector。 Mes…

Media-Download-Helper 完整部署说明

Media-Download-Helper 完整部署说明 前排提示:由于使用到了 Telegram、Google 等服务,所以当前方案不建议国内用户使用! 基于 docker 安装 qbittorrent WebUI 使用 docker 安装 qbittorrent 非常简单,教程也非常非常多&#xff…

安卓7原生相机切到视频崩溃

目录 1、查看日志 2、分析日志、提取重点 3、寻找解决方法 author daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 daisy.skye_嵌入式,Linux,Qt-CSDN博客daisy.skye擅长嵌入式,Linux,Qt,等方面的知识https://blog.csdn.net/qq_40715266?typeblog 1、查看日志 由于安…

格行随身WiFiVS华为天际通VS飞猫U8真实测评大PK,随身WiFi哪个牌子最好用?随身WiFi怎么选?

如今随身WiFi界格行、华为、飞猫三足鼎立,被称为随身WiFi界的“三国杀”,今天,我这个江湖百晓生就来给大家揭秘,究竟谁才是随身网络之王?你准备好围观了吗? 先说说华为天际通随身WiFi,这位老大哥…

今日arXiv最热大模型论文:北大发布,通过上下文提示,让大模型学习一门新的语言

在人工智能领域,大语言模型(LLMs)的发展已经取得了显著的进步,它们在处理高资源语言方面表现出色。然而,对于资源较少的语言,尤其是极低资源语言,这些模型的支持却显得力不从心。这些语言往往缺…

【C++庖丁解牛】C++内存管理 | new和delete的使用以及使用原理

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 1. C/C内存分布2. C语…

方法中单独使用return关键字

一、return关键字的单独使用 二、示例代码 public class ReturnDemo {public static void main(String[] args) {chu(10,0);chu(10,2);}public static void chu(int a,int b){if (b 0) {System.out.println("除法出错,除数不能为零");return;}System.ou…

无处不在的便捷:D咖无人售卖咖啡机在公共场所的应用探索

在繁忙的现代生活中,无人售卖咖啡机作为一项便捷的服务,正逐渐在公共场所得到广泛应用。本文将探讨D咖无人售卖咖啡机在公共场所的应用场景和优势。 一、无人售卖咖啡机的应用场景 写字楼:写字楼内工作人员需要在繁忙的工作中寻找便捷的饮品解…

【center-loss 中心损失函数】 参数与应用

文章目录 前言简单总结一下参数对比解释参数权重衰减(L2正则化)动量其他参数运行 前言 之前我们已经完全弄明白了中心损失函数里的代码是什么意思,并且怎么用的了,现在我们来运行它。 论文:https://ydwen.github.io/…

【数学+前缀和】第十四届蓝桥杯省赛C++ A组《平方差》(c++)

【问题描述】 给定 L,R,问 L≤x≤R 中有多少个数 x 满足存在整数 y,z 使得 xy的平方−z的平方。 【输入格式】 输入一行包含两个整数 L,R,用一个空格分隔。 【输出格式】 输出一行包含一个整数满足题目给定条件的 x 的数量。 【数据范围】 对于 40% 的…

创建RAID0,RAID5并管理,热备盘,模拟故障

目录 1. RAID介绍以及mdadm安装 1.1 安装mdadm工具 2. 创建raid0 2.1 环境准备 2.2 使用两个磁盘创建RAID0 2.3 查看RAID0信息 2.4 对创建的RAID0进行格式化并挂载 2.5 设置成开机挂载 2.6 删除RAID0 3. 创建raid5 3.1 环境准备 3.2 用3个磁盘来模拟R…

【C++杂货铺】详解string

目录 🌈前言🌈 📁 为什么学习string 📁 认识string(了解) 📁 string的常用接口 📂 构造函数 📂 string类对象的容量操作 📂 string类对象的访问以及遍历操…

(MATLAB)应用实例13-时域信号的频谱分析

采用傅里叶变换来计算存在噪声的适于信号频谱。 假设数据采样频率为1000Hz,一个信号包含两个正弦波,频率50Hz、120Hz,振幅0.7、1,噪声为零平均值的随机噪声,采用FFT方法分析其频谱。 clearFs 1000; …

分享axios+signalr简单封装示例

Ajax Axios Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。 从浏览器创建 XMLHttpReque…

kafka 可视化工具

kafka可视化工具 随着科技发展,中间件也百花齐放。平时我们用的redis,我就会通过redisInsight-v2 来查询数据,mysql就会使用goland-ide插件来查询,都挺方便。但是kafka可视化工具就找了半天,最后还是觉得redpandadata…

一招教你优化TCP提高大文件传输效率

在当今企业的数据传输实践中,传统的传输控制协议(TCP)在处理大型文件传输时,其固有的可靠性和复杂性有时会导致效率不足。为了提升大文件传输的效率,对TCP进行优化成为了一个关键任务。 TCP传输的可靠性是其核心优势&a…

Kubernetes-2

Kubernetes学习第二天 k8s-21、Kubernetes的核心组件2、pod2.1、什么是pod 3、3种启动pod的方式3.1、命令行启动pod3.1.1、执行下面命令,背后发生了什么? 3.2、启动一个pod背后发生了什么3.3、使用yml文件3.3.1、标准的pod3.3.2、使用部署控制器启动pod3…