跟月影学可视化
月影
前奇虎 360 奇舞团团长,可视化 UI 框架 SpriteJS 核心开发者,《JavaScript 王者归来》作者
30206 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 54 讲
跟月影学可视化
15
15
1.0x
00:00/00:00
登录|注册

09 | 如何用仿射变换对几何图形进行坐标变换?

应用matrix3d实现3D变换效果
加入随机的扭曲效果
三个矩阵相乘的顺序
缩放矩阵
缩放公式
旋转矩阵
旋转函数推导
变换前后线段长度比例保持不变
变换前后依然是直线段
小试牛刀
优化CSS的transform
transform属性
在片元着色器中着色
用requestAnimationFrame实现动画
设置uniform变量
创建三角形
优化CSS的仿射变换
齐次坐标与齐次矩阵
缩放变换
旋转变换
平移变换
仿射变换的性质
线性变换+平移
推荐阅读
要点总结
CSS的仿射变换
仿射变换的应用:实现粒子动画
仿射变换的公式优化
向量的平移、旋转与缩放
什么是仿射变换
如何用仿射变换对几何图形进行坐标变换

该思维导图由 AI 生成,仅供参考

你好,我是月影。
前面两节课,我们学习了用向量表示的顶点,来描述曲线和多边形的方法。但是在实际绘制的时候,我们经常需要在画布上绘制许多轮廓相同的图形,难道这也需要我们重复地去计算每个图形的顶点吗?当然不需要。我们只需要创建一个基本的几何轮廓,然后通过仿射变换来改变几何图形的位置、形状、大小和角度。
仿射变换是拓扑学和图形学中一个非常重要的基础概念。利用它,我们才能在可视化应用中快速绘制出形态、位置、大小各异的众多几何图形。所以,这一节课,我们就来说一说仿射变换的数学基础和基本操作,它几乎会被应用到我们后面讲到的所有视觉呈现的案例中,所以你一定要掌握。

什么是仿射变换?

仿射变换简单来说就是“线性变换 + 平移”。实际上在平常的 Web 开发中,我们也经常会用到仿射变换,比如,对元素设置 CSS 的 transform 属性就是对元素应用仿射变换。
再说回到几何图形,针对它的仿射变换具有以下 2 个性质:
仿射变换前是直线段的,仿射变换后依然是直线段
对两条直线段 a 和 b 应用同样的仿射变换,变换前后线段长度比例保持不变
由于仿射变换具有这两个性质,因此对线性空间中的几何图形进行仿射变换,就相当于对它的每个顶点向量进行仿射变换。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了如何利用仿射变换对几何图形进行坐标变换。首先,文章解释了仿射变换的概念和性质,指出了其对直线段具有保持直线性和长度比例不变的特性。接着详细介绍了向量的平移、旋转和缩放操作,并给出了相应的数学推导和公式。特别强调了线性变换的叠加性质,是对图形进行变换的基础。随后,文章讨论了仿射变换的公式优化,引入了齐次坐标和齐次矩阵的概念,以便利用线性变换来表示仿射变换。最后,以实现粒子动画为例,说明了仿射变换在可视化中的应用,特别是在实现粒子动画中的重要性。文章内容涵盖了WebGL中uniform变量的设置以及使用requestAnimationFrame实现动画的方法,最终通过仿射变换实现了有趣的粒子动画。通过对顶点着色器和片元着色器中的代码解析,读者可以深入了解如何利用仿射变换实现动画效果。此外,文章还介绍了CSS中的transform属性,以及如何优化transform属性来提高性能。整体而言,本文对仿射变换的数学基础和应用进行了深入浅出的介绍,对读者快速了解和掌握仿射变换具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《跟月影学可视化》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(14)

  • 最新
  • 精选
  • 廖熊猫
    3Blue1Brown 的数学和图形学基础课程,打不开的同学,在3B1B在B站也有账号,老师发的这个是《线性代数的本质》,搜索一下就能找到了,这个视频看完以后对矩阵的理解就能深入很多了

    作者回复: 👍

    2020-07-10
    2
    22
  • Thoughtful valiant.
    小伙伴可以康康我之前写的这两篇文章: 仿射变换理论篇:https://mp.weixin.qq.com/s/-aZ3tUgMv0uGOmbov-RRhw 仿射变换实操篇: https://mp.weixin.qq.com/s/LsDRJ6iJ5q1kNJA6xdADGQ

    作者回复: 棒棒哒

    2020-09-07
    2
  • 白夜
    关于老师例子中vertex矩阵的一些笔记,帮助不太明白的同学: 首先,glsl中矩阵的定义是先列后行的,也就是我们理解的矩阵的转置矩阵(行列互换) 旋转: |cosA -sinA 0| |x| |xcosA-ysinA| |sinA cosA 0| * |y| = |xsinA+ycosA| = |x, y| 旋转A度 |0 0 1| |1| |1 | 位移: |1 0 A| |x| |x+A| |0 1 B| * |y| = |y+B| = |x, y| 位移 |A, B| |0 0 0| |1| |1 | 缩放: |A 0 0| |x| |x*A| |0 B 0| * |y| = |y*B| = |x, y| 中x缩放A,y缩放B |0 0 0| |1| |1 | 所以按照定义将矩阵转置一下,就得到代码中定义的三个Matrix

    作者回复: 赞������

    2020-08-13
    2
    2
  • Geek_frank
    请问关于 webgl绘图如何代码测试?我照着代码敲一遍,没有变换效果,也不报错。把github的代码复制过来就可以运行了。

    作者回复: 如果没报错,只是shader写的问题导致结果不对,调试起来是比较麻烦,只能有耐心地修改并测试结果了

    2020-07-14
    2
    2
  • kylin
    大佬,粒子系统中顶点着色器中的矩阵为啥是你前面讲的矩阵的转置呢?

    作者回复: 因为矩阵可以以行主序,也可以以列主序,在glsl中默认是以列主序

    2020-07-30
  • Geek_frank
    。。。学了这么久的线性代数,现在终于知道一点某些概念在现实中的映射了!

    作者回复: 哈哈,我觉得大学课程安排失败,大一大二基础课并不告诉你这些内容的实际用途,所以没动力学。大三大四开始应用的时候才发现基础没学好。

    2020-07-13
  • 阿鑫
    数学知识全还给老师了
    2020-07-19
    2
  • becky
    数学篇终于学完了,数学渣学哭,对以前学的向量和线性代数有了更多理解。跟着课程敲实现的效果:https://yeying0827.github.io/visualization-demos/#/transform/grain-animation,加了扭曲变换
    2023-11-24归属地:浙江
  • Leon two✌🏻
    请问老师,如果想要动态的改变顶点的数据,不知道要怎么做呢,比如实现粒子效果跟随鼠标点击/移动的位置
    2021-12-10
    1
  • ih gwyc
    我想这就是为什么越学到后面人越少的原因了,都卡在数学这块了吧~~~~
    2021-10-11
    1
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部