当前位置: 首页 > article >正文

【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表示这是个向量,这样就可以通过三维矩阵乘法来表示平移变换了

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

那么点加点呢?

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

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

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


http://www.kler.cn/a/160400.html

相关文章:

  • 贪心算法day03(最长递增序列问题)
  • UniApp 应用、页面与组件的生命周期详解
  • Spring Boot 1.x 版本可以集成 Spring Cloud Sleuth
  • 前端开发中常用的包管理器(npm、yarn、pnpm、bower、parcel)
  • influxDB 时序数据库安装 flux语法 restful接口 nodjsAPI
  • mac终端使用pytest执行iOS UI自动化测试方法
  • 华为配置风暴控制示例
  • 富时中国A50指数查询方法详解
  • Matlab 曲线动态绘制
  • OpenHarmony北向-让更广泛的应用开发者更容易参与
  • 【南京站-EI会议征稿中】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)
  • C/C++---------------LeetCode第2154. 将找到的值乘以 2
  • 微信小程序 -- ios 底部小黑条样式问题
  • k8s中部署基于nfs的StorageClass
  • 看图学源码之 Atomic 类源码浅析二(cas + 分治思想的原子累加器)
  • 基于单片机自动饮料混合机控制系统设计
  • 【Java 基础】22 多线程线程池
  • 2022年第十一届数学建模国际赛小美赛A题翼龙如何飞行解题全过程文档及程序
  • 在github中通过action自动化部署 hugo academic theme,实现上传md文件更新博客内容
  • 华为数通---配置端口安全案例
  • 解决el-tree数据回显时子节点部分选中父节点都全选中问题
  • NFC和蓝牙在物联网中有什么意义?如何选择?
  • 华为设备使用python配置netconf 功能
  • javaee实验:文件上传及拦截器的使用
  • HarmonyOS4.0从零开始的开发教程03初识ArkTS开发语言(中)
  • RPC简介和grpc的使用