【GAMES101】二维变换和齐次坐标

这几天都在抽空学OpenGL、敲leetcode和看games,这里留点笔记给以后复习

games101第一节课在吹水,第二节课讲了线性代数的入门知识,比较简单,这里稍微回顾一下重点,然后开始讲第三节课的二维变换和齐次坐标

目录

向量

向量的点乘

向量的叉乘

​二维变换

缩放

拉伸

旋转

平移

齐次坐标


向量

games101的向量是默认列向量

向量的点乘

向量的点乘就是对应的元素相乘

这个可以用来求向量之间的夹角,特别是当两个向量都是单位向量的时候,它们夹角的余弦值就是两个向量点乘的结果

向量的叉乘

两个向量叉乘的结果是这样的一个向量:方向与两个向量垂直,按右手系是从a旋转到b大拇指指向的方向,大小是两个向量的长度和夹角正弦值的乘积

坐标系的话,games101用的是右手系,OpenGL用的也是右手系,但是unity和ue都是左手系

叉乘可以用来判断一个点是否在一个多边形内部,如下P点,如果AP×AB和BP×BC和CP×CA的方向是一样的,那么这个P点就在三角形内部

二维变换

缩放

对于一个图形进行缩放,实际上就是对于每一个点的坐标进行缩放,比如缩小一半,就是x和y都变成原来的一半,这个没有什么问题

更方便的统一操作,我们可以用一个矩阵乘法来表示缩放这个操作,x和y都乘以s

x和y不同程度的拉伸

对称变换

拉伸

往某个方向拉伸,比如x方向,y不变,x’=x+ay

旋转

逆时针旋转,这个可以通过固定两个顶点来推出这个变换矩阵

平移

对于平移,即x和y加上对应的平移量

齐次坐标

其实你可能已经发现,在变换中,缩放、拉伸和旋转都可以用一个矩阵乘法来表示,这三个变换又可以称为线性变换,唯独平移不可以用矩阵乘法表示(我尝试过了,真不行)

齐次坐标就是解决这个问题的,可以统一变换为一个矩阵乘法形式

解决办法:通过增加一个维度来表示,第三个维度为1表示这是个点,第三个维度为0表示这是个向量,这样就可以通过三维矩阵乘法来表示平移变换了

这样子的话,那么两个向量相加是向量,两个点相减是向量,一个点加上一个向量还是一个点

那么点加点呢?

实际上还是点,而且是这两个点的中点,因为点,确切的表示是这个:

因此通过齐次坐标,我们就可以统一变换为矩阵乘法形式

由于矩阵乘法的规律,所以多次变换是以矩阵左乘的顺序相乘的,而且是先进行线性变换再平移 

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

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

相关文章

ACM32F42X系列芯片有何性能?为什么可以应用在工业控制 中等产品上

ACM32F42X 芯片的内核基于 ARMv8-M 架构,支持 Cortex-M33 和 Cortex-M4F 指令集。内核支持一 整套 DSP 指令用于数字信号处理,支持单精度 FPU 处理浮点数据,同时还支持 Memory Protection Unit (MPU)用于提升应用的安全…

C++[面向对象的程序设计]_基础入门(上)(万字总结)(建议收藏!!!)

目录 1. C基础入门 1.1 变量 1.2 常量 1.3 关键字 1.4 标识符命名规则 1.5 数据类型 1.5.1 整型 1.5.2 sizeof 关键字 1.5.3 实型(浮点型) 1.5.4 字符型 1.5.5 转义字符 1.5.6 字符串类型 1.5.7 布尔类型 1.5.8 数据的输入 1.6 运算符 …

ps快捷键和常见项目总结

处理以像素构成的位图的软件 Mac笔记本快捷键: 打开文件:commandO 图像缩放:command 多个文件切换:同一桌面中:command (英文状态下输入) 切换屏幕模式:F,全屏模式下Tab键可进行切换 首选项—性能&a…

python/matlab图像去雾/去雨综述

图像去雾和去雨是计算机视觉领域的两个重要任务,旨在提高图像质量和可视化效果。本文将综述图像去雾和去雨的算法、理论以及相关项目代码示例。 一、图像去雾算法 基于暗通道先验的方法: 这是广泛应用于图像去雾的经典算法之一。该方法基于一个观察&…

SpringMVC修炼之旅(2)基础入门

一、第一个程序 1.1环境配置 略 1.2代码实现 package com.itheima.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;//定义…

MySQL联合查询、最左匹配、范围查询导致失效

服务器版本 客户端:navicat premium16.0.11 联合索引 假设有如下表 联合索引就是同时把多列设成索引,如(empno,ename)在查询的时候就会先按照empno进行查询,再按照ename进行查询其中empno是全局有序,ename是局部有…

【银行测试】支付类测试关注点与异常点+支付平台...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、支付类的测试关…

Django回顾 - 6 Ajax

【1】Ajax 定义: 异步Javscript和XML 作用: Javascript语言与服务器(django)进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据) 同步交互和异步交互: 1、同步交互&…

Web server failed to start. Port 8081 was already in use.

netstat -aon|findstr "8081" taskkill /pid 20824 /f

现代雷达车载应用——第2章 汽车雷达系统原理 2.1节

经典著作,值得一读,英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.1 基本雷达功能 雷达系统通过天线或天线阵列向空间辐射电磁能量。辐射的电磁能量“照亮”周围的目标。“被照亮”的目标拦截一些辐射能量&#xff0…

开发步骤、Java开发工具

目录 一、开发步骤 二、Java开发工具 JDK安装完毕,我们就可以开始开发第一个Java程序了,习惯性的成为HelloWorld。 一、开发步骤 Java程序开发三步骤:编写、编译、运行 -将Java代码编写到扩展名为.java的源文件中 -通过javac.exe命令对…

Kontakt v7.7.2(音频采样器)

Native Instruments Kontakt 7是一款强大的软件采样器,它允许用户从各种来源采样音频并进行编辑和处理。它包含大量预设采样库,包括乐器、合成器、鼓组和声音效果等。此外,Kontakt 7还允许用户创建自己的采样库,以便根据自己的需要…

CTF特训日记day7

复现华为杯研究生国赛的adv_lua题目 从题目描述来看,漏洞应该和bytearray相关 用IDA逆向一下然后直接字符串搜索bytearray 只有这里有bytearray字样,继续查找交叉引用: 可以看到一系列方法,显然都是为bytearray所注册的吗&am…

Xilinx FPGA平台DDR3设计详解(三):DDR3 介绍

本文介绍一下常用的存储芯片DDR3,包括DDR3的芯片型号识别、DDR3芯片命名、DDR3的基本结构等知识,为后续掌握FPGA DDR3的读写控制打下坚实基础。 一、DDR3芯片型​号 电路板上的镁光DDR3芯片上没有具体的型号名。 ​如果想知道具体的DDR3芯片型号&#…

电力智慧运维系统

电力智慧运维系统是以提高用户侧电力运行安全,降低运维成本为目标;采用智能化运维管理工具—“电易云”,帮助企业建立电力运维体系全方位的信息化、数字化平台,实现设备运行的数字化在线监控与线下维护处理的有机融合,…

【海思SS528 | VO】MPP媒体处理软件V5.0 | VO模块编程总结

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

Netty中Channel的isWritable方法理解

目录 初见 深入 需要注意 对待超SIZE情况开源项目怎么做 1、seata中 2、SUMMER中 3、一些资料中 总结 初见 以下是包中注释 Returns true if and only if the I/O thread will perform the requested write operation immediately. Any write requests made when t…

如何解决syntaxerror: more than 255 arguments 报错

如何解决syntaxerror: more than 255 arguments 报错 问题背景解释解决方案 问题背景 今天拼接特征的时候,突然代码报错syntaxerror: more than 255 arguments ,看了一下感觉这个报错非常有意思,估计平时也是没机会碰到,和大家分…

线程基础介绍

什么是线程? linux内核中是没有线程这个概念的,而是轻量级进程的概念:LWP。一般我们所说的线程概念是C库当中的概念。 1.1线程是怎样描述的? 线程实际上也是一个task_struct,工作线程拷贝主线程的task_struct&#…

推出ASM2824 PCIe交换机,预计M.2插槽将增加,E3SB40E00004EE、E2SB40E00000JE 40MHz晶振

一、ASM2824 PCIe交换机,预计M.2插槽将增加 ASM2824 PCI-Express Gen 3.0 x24交换机采用PCI-Express 3.0 x8,并提供四个PCI-Express 3.0 x4连接,其结构为PLX PEX8747的一半。从理论上讲,这将允许主板设计人员从英特尔Z390芯片组的…