《计算机图形学》第二课笔记-----二维变换的推导

server/2025/3/15 10:34:52/

前言:为什么这么突兀的把这一节内容放在了第二课,第一是因为我急于求成,第二是因为这一章节太重要了,这几乎是二维三维变换的最核心的东西,理解了这一章节内容,后面的就会像打通了任督二脉一样,so,那让我们开始吧,我们只用初中的知识把这一章说清楚

所谓的二维变换核心的东西其实就是求一个点绕一个点旋转后的位置

让我们对这段话进行一些约束,在一个去掉了Z轴的笛卡尔坐标系内,让我们再大白话点,在一个平面坐标系内,让我们再大白话点,就是小时候上数学课时候老师在黑板上化的那个一横一竖,上面一个箭头,前面一个箭头那种坐标系内
我们终于白话完了,正文开始,在一个坐标系内一个点绕着原点o旋转一定的度数,旋转到新的一个点,求这个点在这个坐标系内的位置,也就是新的点位的x’的长度和y’的长度。
结合下图描述了一个已知的点[x,y],沿原点o旋转了β度到达了新的点[x’,y’],求[x’,y’]的位置
我们需要了解的前提是[x,y]是已知的
那么x’也可以写成r*cos(α+β),因为我们是绕原点旋转,等于在绕原点画圆,so,每一个半径都应该是相等的,记住这个前提,后面要用。

在这里插入图片描述

x ′ = r ∗ c o s ( α + β ) x'=r*cos(α+β) x=rcos(α+β
上面这个式子应该很好理解,如果不理解可以只补一下三角函数的cos 和 sin即可

接下来我们展开这个式子,有人可能会在这里卡住一下,但这其实都是固定推导您只需复制展开前的式子问下一ai,他会说的比我清楚多了,总而言之如果您不想深究,不用理会为什么展开以后是这样子,直接过即可
x ′ = r ∗ c o s α ∗ c o s β − r ∗ s i n α ∗ s i n β x'=r*cosα*cosβ-r*sinα*sinβ x=rcosαcosβrsinαsinβ

当我们观察展开的式子,这个时候神奇的事情发生了,rcosα,不就是 r x r r\frac{x}{r} rrx,约分以后不就是x么
我们再观察r
sinα,那不就是 r y r r\frac{y}{r} rry,约分以后那不就是y么

然而x,y又是已知的,那不就是用已知的x,y去乘我们旋转的β角的cos和sin么,至此答案已经很清晰了,可以说这篇博客要说的已经说完了,您仅需初中知识就可以理解这一切,后续的剩下的推导也只是上述思考过程的重复,当然我们还是要写完这一切。

x ′ = x ∗ c o s β − y ∗ s i n β x'=x*cosβ-y*sinβ x=xcosβysinβ
y ′ = x ∗ s i n β + y ∗ c o s β y'=x*sinβ+y*cosβ y=xsinβ+ycosβ

最后我们把他写成矩阵的形式就是下面的式子,我们需要注意的是矩阵乘法并不满足交换律,so,我们不能调换位置

[ c o s β − s i n β s i n β c o s β ] [ x y ] \begin{bmatrix} cosβ & -sinβ \\ sinβ & cosβ \\ \end{bmatrix}\begin{bmatrix} x\\ y\\ \end{bmatrix} [cosβsinβsinβcosβ][xy]

当然我们需要注意,当前我们讨论的是逆时针旋转这种情况,顺时针的推到过程在下下张图

那么剩下的顺时针推导我们就不写这么详细了,因为一切已经不言自明了,下一节我们就去到代码层面去实现它,平移我们也就不在此解释了,因为那些比这个容易理解的多。

在这里插入图片描述

原因如上,顺时针的推导就不赘述了

在这里插入图片描述

现在我们来到代码层面,变成语言选择qt5,因为我更熟悉这个编程语言,而且如果我们仅仅知识为了演示二维变换的推导,qt5足够了,主要原因还是我足够熟悉。不用opengl是因为我们像尽其可能的展示细节,而不是直接调用显卡为我们实现好的接口。


http://www.ppmy.cn/server/175126.html

相关文章

【云馨AI-大模型】未来职业的“护城河”:哪些领域AI难以逾越?

未来职业的“护城河”:哪些领域AI难以逾越? 在人工智能席卷全球的浪潮中,无数职业面临被替代的隐忧。然而,技术越是强大,人类某些核心能力的价值反而愈加凸显。从医疗关怀到艺术创作,从教育到复杂决策&…

FPGA前端设计适合哪些人学?该怎么学?

FPGA前端设计是一个具有挑战性且薪资待遇优渥的岗位,主要涉及FPGA芯片定义、逻辑结构设计。这个职位要求相关专业的本科及以上学历,并且需要掌握一定的专业技能。工作内容从IP级设计到全芯片(SoC)设计,涉及多个设计层级…

MATLAB代码开发实战:从入门到高效应用

一、MATLAB生态系统的核心优势 (扩展原有内容,增加行业数据) MATLAB在全球工程领域的市场占有率已达67%(2024年IEEE统计),其核心优势体现在: 矩阵运算速度比传统编程快3-5倍包含22个专业工具箱…

在ArcGIS中对图斑进行自上而下从左往右编号

在ArcGIS中为图斑实现自上而下、从左往右的编号,需结合坐标排序与脚本自动编号功能。以下是具体操作步骤: 一、添加并计算坐标字段 新建字段 在图层属性表中添加两个双精度字段:cX(图斑中心点X坐标)和 cY(图…

Go string 字符串底层逻辑

在 Go 语言中,string 类型的底层结构是一个结构体,包含两个字段:一个指向字节数组的指针和该字节数组的长度。以下是其在 Go 源码中的大致定义:type stringStruct struct {str unsafe.Pointerlen int } str:这是一个指…

【Rust基础】Rust后端开发常用库

使用Rust有一段时间了,期间尝试过使用Rust做后端开发、命令行工具开发,以及做端侧模型部署,也尝试过交叉编译、FFI调用等,也算是基本入门了。在用Rust做后端接口开发时,常常会找不到一些合适库,而这些库在J…

前端构建工具进化论:从Grunt到Turbopack的十年征程

前端构建工具进化论:从Grunt到Turbopack的十年征程 一、石器时代:任务自动化工具(2012-2014) 1.1 Grunt:首个主流构建工具 // Gruntfile.js 典型配置 module.exports function(grunt) {grunt.initConfig({concat: {…

内网渗透之内网基础知识(一)

工作组 工作组:工作组是局域网中的一个概念,他是长久的资源管理模式。默认情况下使 用工作组方式进行资源管理,将不同的 computer 按照不同的要求分类到不同的组 域:用来描述一种架构,和“工作组”相对应,由工作组升级而来的高级…