图形学变换——平移、旋转和缩放

2023-11-06

一、概述

在齐次坐标中,所有的仿射变换都可以使用如下形式的 4 x 4 矩阵来表示
在这里插入图片描述
p ( x , y , z ) p (x, y, z) p(x,y,z) 表示方式为
在这里插入图片描述
向量 a ⃗ ( x , y , z ) \vec a (x, y, z) a (x,y,z) 表示方式为
在这里插入图片描述
关于齐次坐标的理解参考博文:齐次坐标

二、平移

平移(translation)变换把点沿着给定方向移动固定距离, p ′ = p + d p' = p + d p=p+d 如下图所示。
在这里插入图片描述
比如:将点 p ( 1 , 1 , 1 ) p (1, 1, 1) p(1,1,1),往 X X X 轴正方向移动 1单位,往 Y Y Y 轴正方向移动 2 单位, 往 Z Z Z 轴正方向移动 3 单位,最终坐标是 p ′ ( 2 , 3 , 4 ) p'(2, 3, 4) p(2,3,4)
数学上的运算为 p ( 1 , 1 , 1 ) + d ( 1 , 2 , 3 ) = p ′ ( 2 , 3 , 4 ) p (1, 1, 1) + d (1, 2, 3) = p'(2, 3, 4) p(1,1,1)+d(1,2,3)=p(2,3,4)
在图形学中, p + d p + d p+d 可以表示为 p p p 乘于 d d d 对应的平移矩阵 T T T
在这里插入图片描述
所以 p ′ p' p 的平移运算可表示为
在这里插入图片描述

在这里插入图片描述

二、旋转

旋转(rotation)变换指点绕着特定的一个点旋转固定角度。下面我们使用 2D 坐标讲解点 p ( x , y ) p(x, y) p(x,y),绕特定的点 O ( 0 , 0 ) O(0, 0) O(0,0) 原点旋转 θ θ θ 度,变换后的坐标表示为 p ′ ( x ′ , y ′ ) p'(x', y') p(x,y)
在这里插入图片描述

p p p p ′ p' p 转换为极坐标表示则有
在这里插入图片描述
利用两角和的正弦和余弦公式可得
在这里插入图片描述
转换为矩阵像形式
在这里插入图片描述
在 3D 中绕 Z Z Z 轴旋转的所有点 z z z 值不变,等价于上面 2D 绕原点的旋转,所以 3D 坐标的旋转可以表示为
在这里插入图片描述
在图形学中 绕 Z Z Z 轴旋转的变换矩阵为
在这里插入图片描述
最终 p ′ p' p 的旋转可表示为
在这里插入图片描述
同理可得绕 X X X 轴旋转的变换矩阵为 R x R_{x} Rx,绕 Y Y Y 轴旋转的变换矩阵为 R y R_{y} Ry。注:这里使用右手坐标系
在这里插入图片描述

三、缩放

缩放(scaling)变换指沿着指定不动点(变换后该点位置保持不变,这里使用原点),对象沿着指定方向(坐标轴)伸长或缩短。缩放后的点 p ′ ( x ′ , y ′ , z ′ ) p'(x', y', z') p(x,y,z) 的坐标可表示为
在这里插入图片描述
使用齐次坐标表示为
在这里插入图片描述
在这里插入图片描述
欢迎关注个人公众号,实时推送最新博文!
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图形学变换——平移、旋转和缩放 的相关文章

  • OpenGL z轴指向哪里?

    我正在尝试了解 OpenGL 坐标系 我到处都看到它被描述为右撇子 但这与我的经验不符 我尝试绘制一些形状和 3 d 对象 我发现 z 轴显然指向 屏幕 而 x 指向右侧 y 指向上方 这是左手坐标系的描述 我缺少什么 编辑 例如 http
  • 为什么我的 FPS 相机一劳永逸地滚动?

    如果我忽略四元数代数的肮脏细节 我想我理解了旋转和平移变换背后的数学 但仍然不明白我做错了什么 为什么我的相机一劳永逸地滚动 更具体地说 我应该如何从相机的方向 旋转矩阵 计算相机视图矩阵 我正在用 Python 编写一个简约的 3d 引擎
  • glEnableVertexAttribArray 中“index”参数的含义以及(可能)OS X OpenGL 实现中的错误

    1 我是否正确理解 要使用顶点数组或VBO进行绘制 我需要所有属性在着色器程序链接之前调用glBindAttribLocation 或者在着色器程序成功链接后调用glGetAttribLocation 然后使用glVertexAttribP
  • 不理解 gluOrtho2D 函数

    我不能做什么gluOrtho2D 函数是做什么的 是否将原点固定在 OpenGL 窗口上的某个特定点或其他位置 这是因为gluOrtho2D 1 1 1 1 将原点固定在窗口的中间 如果它在某个时刻没有修复原点 那么有什么方法可以修复原点
  • NV_path_rendering替代方案[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我刚刚观看了 Siggraph 2012 的一个非常令人印象深刻的演示 http nvidia fullviewmedia com sig
  • 当 OpenGL 中同时绑定 1D 和 2D 纹理时,正确的行为是什么?

    假设你有这样的东西 glBindTexture GL TEXTURE 2D my2dTex glBindTexture GL TEXTURE 1D my1dTex glBegin 正确的 OpenGL 行为是什么 要绘制一维纹理 二维纹理还
  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • 在 Linux 上运行我自己的程序的权限被拒绝? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有Ubuntu 9 4 我已经构建了程序 一些基本的 OpenGL 该程序只是制作一个旋转的正方形 然后运行它并 sh blabla p
  • Visual Studio 2010 中的 SOIL 设置

    我无法得到SOIL http www lonesock net soil html正确使用 Visual Studio 2010 我远非 VS 专家 但据我所知 只需执行以下步骤即可使环境正常运行 属性 gt gt C C gt 常规 gt
  • 使用 JOGL 和 Android OpenGL 编写可移植 Java 应用程序

    我计划编写一款可以在 PC 和 Android 上运行的 Java 3D 游戏 不幸的是 这两个平台似乎没有通用的 OpenGL API API 是否有显着差异 有没有办法在两个版本中使用相同的 3D 代码 这是不是一个好主意 Androi
  • OpenGL 3.1 中已弃用 glLineStipple

    glLineStipple在最新的 OpenGL API 中已被弃用 它被替换成什么 如果不更换 怎样才能达到类似的效果呢 我当然不想使用兼容性配置文件 抱歉 它还没有被任何东西取代 我想到的第一个模拟它的想法是几何着色器 您向几何着色器提
  • 使用 pyclutter 进行编程

    我是混乱 和 pyclutter 的新手 我一直在尝试使用 pyclutter 到目前为止我还没有找到任何好的教程 我的意思是没有真正正确解释的内容 我看到了几个示例程序 但是当我尝试使用 pyclutter 时 我没有得到任何好的结果 这
  • 在 OpenGL 中只使用纹理的 Alpha 通道?

    嘿 我正在尝试将恒定颜色绘制到帧缓冲区 并使用 RGBA 纹理中的 Alpha 通道将其混合 我一直在研究 glBlendFunc 和 glBlendColor 但似乎无法找到忽略纹理中的 RGB 值的方法 我想我必须自己提取 alpha
  • 如何在 Visual Studio 2012 中安装 GLUT 和 OpenGL?

    我今天刚安装了Visual Studio 2012 我想知道如何在该平台上安装GLUT和OpenGL OpenGL 应该已经存在 可能会缺少 Freeglut GLUT GLUT 现在已经非常过时并且没有得到积极的支持 所以你当然应该使用
  • 不明确的 OpenGL 默认相机位置

    在我的Opengl程序中 在我应用透视投影矩阵之前 每当我绘制一些对象时 我都会在世界坐标系的原点处绘制它 但是几乎所有Opengl教程都指出相机 我的投影视图 位于原点朝向正 z 轴 这取决于您稍后如何处理投影矩阵中的 z 值 但是如果这
  • LWJGL3:重载的 glBufferData 方法

    我正在使用 LWJGL 调用 OpenGL 函数 方法org lwjgl opengl GL15 glBufferData http javadoc lwjgl org org lwjgl opengl GL15 html glBuffer
  • 纹理的内部格式

    看下面的OpenGL函数 void glTexImage2D GLenum target GLint level GLint internalFormat GLsizei width GLsizei height GLint border
  • 在 Ubuntu 中与未编译的着色器链接

    我需要加载 glsl 来绘制一些东西 我的环境是Ubuntu 13 04 因此它不存在GLuint InitShader GLuint GLuint 这是我的对象创建 预链接步骤和链接的配置 不幸的是 它仍然出现错误 该错误与未编译的着色器
  • glColor4f() - alpha 值的效果

    我正在使用 glColor4f 令人惊讶的是 更改 alpha 即第四个参数 不会导致透明度发生任何变化 代码段是 const GLfloat squareVertices 0 5 0 5 0 0 0 5 0 5 0 0 0 5 0 5 0
  • MATLAB 图形渲染:OpenGL 与 Painters?

    当谈到使用哪个渲染器来处理 MATLAB 图形或何时它很重要时 我一无所知 但我遇到过某些示例 其中does matter plot 0 0 ko markersize 50 linewidth 8 set gcf renderer ope

随机推荐

  • vue element Tooltip套用Popover

    需求 同一个图标 鼠标移入显示提示语 点击显示列表 鼠标移入 鼠标点击
  • Linux命令ifconfig报错-bash: ifconfig: command not found

    查看我们配置的网卡 vi etc sysconfig network scripts ifcfg ens33 如果想要配置静态IP http t csdn cn L3TPM 进入sbin目录 sbin 管理员可以操作的命令存放的目录 cd
  • 利用PLSQL Developer对oracle中的数据进行备份恢复

    以备份scott用户为例 目标 备份里面所有的对象 切换到scottconn scott tiger 进入 工具 gt 导出用户对象 如图所示 创建表空间及用户名 并赋予权限 创建表空间 Create tablespace adm data
  • Excel公式不能自动更新数据

    Excel公式不能自动更新数据 问题及解决办法 原因 Excel的公式计算配置为 手动 状态 问题及解决办法 原因 Excel的公式计算配置为 手动 状态 单击 公式 选项卡 然后单击 计算选项 按钮 将计算选项设置为 自动 即可
  • 【STM32Cube】学习笔记(四):LED&按键&蜂鸣器

    文章目录 摘要 一 简介 1 GPIO简介 2 LED 3 按键 4 蜂鸣器 二 硬件电路设计 1 LED电路 2 按键电路 2 蜂鸣器电路 三 软件设计 1 CubeMX配置 2 CubeIDE代码 3 结果显示 四 总结 五 附录 摘要
  • idea如何import_导入项目

    今天 炸药 问我idea如何导入项目 先close project 再到开始界面import 然后一直next就可以了 具体操作和注意事项 特别注意 gt gt gt 开始导入项目前 注意 删掉别人电脑的idea配置和class 只留src
  • Unity3D里不存在Vuforia

    起初在Unity里没能找到ARCamera 然后在搜索框里去搜索Vuforia 发现根本不存在 下载Vuforia插件包 下载Vofuria插件包 在Unity里导入Vuforia插件包 在Unity里导入插件包后 软件会提示update
  • R语言深度学习驱动的课程推荐:基于关联规则挖掘的实践

    目录 1 引言 2 数据集准备 3 数据预处理 4 关联规则挖掘 5 结果分析 6 总结 摘要 课程推荐在教育领域具有重要意义
  • 文件IO

    文章目录 简介 OPEN函数 CREATE函数 CLOSE函数 LSEEK函数 READ函数 WRITE函数 简介 文件IO 常用五大函数 open read write lseek close 称之为不带缓存的I O 不带缓存 指的是每个
  • 一些好用的 alias 命令

    一些好用的 alias 命令 Linux和MaxOSX的 alias 命令使用技巧 因为 gist 被强的比较厉害 所以只好放到 repo 中 alias 注意 等号两边不能有空格 可以放到 bash profile 文件中 SYS ALI
  • A Survey on Application of Knowledge Graph

    本文是针对 A Survey on Application of Knowledge Graph 的一个翻译 知识图谱应用综述 摘要 1 引言 2 应用 2 1 问答系统 2 1 1 基于语义分析 2 1 2 基于信息检索 2 1 3 基于
  • 分布式系统日志集中到一台服务器,将分布式中多台节点的日志信息集中到一个节点上...

    转载 http my oschina net duxuefeng blog 317570 1 准备 master 10 1 5 241 slave01 10 1 5 242 在服务器端和客户端分别安装rsyslog root master
  • QT(2):信号槽机制和源码

    信号槽 信号槽是观察者模式的一种实现 订阅 发布 一个信号就是一个能够被观察的事件 一个槽就是一个观察者 被观察者 多观察者 信号发出者调用所有注册的槽函数 信号槽本质上是两个对象的函数地址映射 单线程下 相当于函数指针调用 多线程下 发送
  • 多态 数组 继承 类与接口

    多态 1 多态概念 多态就是多种状态 表现为多种形式的能力 2 多态怎么理解 多态可分为静态多态和动态多态 静态多态 当创建一个父类时 子类可以调用父类中的所有方法 而自己没有独有的方法 具体表现方法是重载 动态多态 当创建一个父类时 子类
  • 算法竞赛进阶指南 递归实现组合型枚举

    文章目录 1 递归实现指数型枚举 2 递归实现排列型枚举 题目链接 https ac nowcoder com acm contest 998 B 1 递归实现指数型枚举 思路 在 递归实现指数型枚举 的基础上 如果已经选择了超过 m m
  • k8s集群中部署微服务Vue

    k8s集群中部署微服务后台管理项目 admin 一 项目创建 修改依据 npm版本为12 2 0 可以使用 nvm进行安装及切换使用 npm install node sass 4 14 npm install 二 项目容器镜像准备 roo
  • 设计链表00

    题目链接 设计链表 题目描述 注意 addAtIndex index val 方法中 如果 index 等于链表的长度 则该节点将附加到链表的末尾 如果 index 大于链表长度 则不会插入节点 如果index小于0 则在头部插入节点 解答
  • python中类及其实例详解

    http wiki woodpecker org cn moin PyNewStyleClass 1 python中的 new style class 及其实例详解 原文见 Python In a Nutshell 2003 5 2节 1
  • Windows11 0x80190001错误解决

    一 Windows11 0x80190001错误 笔者当前使用的系统版本为 win11 21H2 windows11出现这样的错误 初步判断为windows的网络连接问题引起的 或者是系统当前网络设置的问题 当然也不排除win11自身系统的
  • 图形学变换——平移、旋转和缩放

    图形学变换 一 概述 二 平移 二 旋转 三 缩放 一 概述 在齐次坐标中 所有的仿射变换都可以使用如下形式的 4 x 4 矩阵来表示 点 p x y z