前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【GAMES101】二维变换和齐次坐标

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

作者头像
叶茂林
发布2023-12-07 13:35:10
1390
发布2023-12-07 13:35:10
举报

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

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

那么点加点呢?

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 向量
    • 向量的点乘
      • 向量的叉乘
      • 二维变换
        • 缩放
          • 拉伸
            • 旋转
              • 平移
              • 齐次坐标
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档