Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2D 绘图中的坐标系统和坐标变换
Search
Baidu FEX Team
May 07, 2014
Technology
1.1k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2D 绘图中的坐标系统和坐标变换
本文介绍在 2D 绘图技术中的坐标系统和坐标变换的相关知识。同时介绍 Kity 在这方面提供的 API 。希望这些知识对于需要进行图形应用开发的同学会有所帮助。
Baidu FEX Team
May 07, 2014
More Decks by Baidu FEX Team
See All by Baidu FEX Team
HTML5富交互与社交传播
baidufe
1
940
F.I.S——提升产品性能与开发效率的前端解决方案
baidufe
1
760
跨端组件实践
baidufe
7
830
如何成为一名优秀的前端工程师
baidufe
19
2.5k
静态资源自动合并系统
baidufe
12
2.4k
基于HTML5技术的文件上传
baidufe
4
2.4k
百度前端基础数据平台介绍
baidufe
17
3.4k
Web富应⽤用的设计与开发
baidufe
4
860
如何做导师
baidufe
9
890
Other Decks in Technology
See All in Technology
個人OSSが、机の上から世界に広がるまでの話
shinyasaita
1
290
コンポーネント名には何を含めるべきなのか? / what-should-be-included-in-component-names
airrnot1106
0
250
BigQuery を検索ソースとした AI Agent の作り方って 〇〇 通りあんねん
satohjohn
0
150
大 AI 時代におけるC# の事情 ~ぶっちゃけトークを交えながら~
nenonaninu
1
650
【CEDEC2026】ゲームシナリオライターを支援するAIツール開発の実践 ― 設計とプロンプトの工夫 ―
cygames
PRO
1
580
PLaMo 3.0 Primeの構造化出力サポート
pfn
PRO
0
170
Webの技術とガジェットで子どもも大人も楽しめるワクワク体験を提供する / Qiita Tech Festa Day 2026
you
PRO
1
330
脱Jenkins、インターン生が挑んだCIツールGitHubActions移行
mixi_engineers
PRO
1
310
PLaMo 3.0 Primeの事後学習
pfn
PRO
0
260
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
270
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
0
200
AIで楽になるはずが、なぜ疲れる?
kinopeee
0
150
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
430
Darren the Foodie - Storyboard
khoart
PRO
3
3.5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Evolving SEO for Evolving Search Engines
ryanjones
0
250
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
350
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Bash Introduction
62gerente
615
220k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Discover your Explorer Soul
emna__ayadi
2
1.2k
How GitHub (no longer) Works
holman
316
150k
Transcript
坐标系统与坐标变换 FEX 刘家鸣
坐标系统概述 • 原点 • 互相垂直的两条数轴 • ⾓角度定义
数学上 X(0°) Y(90°) 45° 坐标系统概述
屏幕上 X(0°) Y(90°) 45° 坐标系统概述
视野与世界 • 世界是⽆无穷⼤大的 • 视野是观察世界的⼀一个矩形区域 • 坐标系在世界中
世界 视野
锤⼦子的故事
从前有⼀一个画家
他很擅⻓长画锤⼦子
有⼀一天他改⾏行当程序员
⽼老板说 “你用程序画一个锤子吧”
太简单了 x1 y1 h1 x2 y2 h2 w1 w2 X
Y
⽼老板⼜又说 “锤子往右挪100像素吧”
没问题 x1 y1 h1 x2 y2 h2 w1 w2 X
Y
没问题 x1 + 100 y1 h1 x2 + 100 y2
h2 w1 w2 X Y
? ? ?
⾃自⾝身坐标系和参考坐标系 • 为图形复合⽽而⽣生的机制 • 只在⾼高层绘图技术中⽀支持(如SVG、VML) • 定义 • 区别
定义 OC OB OA var a = new Rect(100, 50,
0, 0); var b = new Rect(20, 120, 40, 50); var c = new Group().addShapes([a, b]); ⾃自⾝身坐标系和参考坐标系
区别 OC OB OA ⾃自⾝身坐标系和参考坐标系 1. 产⽣生的场景不同 ⾃自⾝身坐标系:与⽣生俱来 参考坐标系:在从属关系中 2.
数量不同 ⾃自⾝身坐标系:有且仅有 1 个 参考坐标系:可以有 n 个 3. 使⽤用的⺫⽬目的不同 ⾃自⾝身坐标系:为了定义图形 参考坐标系:为了观察图形 Live Example
坐标变换 • 定义 • 线性变换 • 线性变换列表 • 前驱坐标系与图形的变换矩阵
定义 • 数学上,「坐标变换」 是采⽤用⼀一定的数学⽅方法 将⼀一个坐标系的坐标变 换为另⼀一个坐标系的坐 标的过程。 • 2D 绘图中,「坐标变
换」是对⼀一个坐标系到 另⼀一个坐标系的变换的 描述 坐标变换 OC OB OA
线性变换 坐标变换 • 线性变换公式 X’ = aX + cY +
e Y’ = bX + dY + f • 变换矩阵,记为 M a c e b d f 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥
线性变换 • 线性变换公式 X’ = aX + cY + e
Y’ = bX + dY + f • 变换矩阵,记为 M OA OB 坐标变换 1 0 10 0 1 10 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ a c e b d f 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥
平移 OA OB 线性变换 1 0 10 0 1 10
0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥
旋转 OA 线性变换 • 使⽤用极坐标求变换矩阵 OB X = r ⋅cos(α)
Y = r isin(α) ⎧ ⎨ ⎩ 极坐标⽅方程: 旋转 θ 度后: X ' = r ⋅cos(α +θ) Y ' = r isin(α +θ) ⎧ ⎨ ⎩ 展开: X ' = r ⋅cos α ( )cos θ ( )− r ⋅sin α ( )sin θ ( )= cos θ ( )X − sin θ ( )Y + 0 Y ' = r ⋅cos α ( )sin θ ( )+ r ⋅sin α ( )cos θ ( )= sin θ ( )X + cos θ ( )Y + 0 ⎧ ⎨ ⎪ ⎩ ⎪
旋转 OA 线性变换 O B • 使⽤用极坐标求变换矩阵 cos(30°) −sin(30°) 0
sin(30°) cos(30°) 0 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ X = r ⋅cos(α) Y = r isin(α) ⎧ ⎨ ⎩ 极坐标⽅方程: 旋转 θ 度后: X ' = r ⋅cos(α +θ) Y ' = r isin(α +θ) ⎧ ⎨ ⎩ 展开: X ' = r ⋅cos α ( )cos θ ( )− r ⋅sin α ( )sin θ ( )= cos θ ( )X − sin θ ( )Y + 0 Y ' = r ⋅cos α ( )sin θ ( )+ r ⋅sin α ( )cos θ ( )= sin θ ( )X + cos θ ( )Y + 0 ⎧ ⎨ ⎪ ⎩ ⎪
缩放 OA 线性变换 • a 和 c 直观控制缩放 OB
缩放 OA 线性变换 • a 和 c 直观控制缩放 OB 2
0 0 0 2 0 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥
变换列表 OA 线性变换 • 表⽰示⼀一系列的变换,结 果为变换的矩阵的乘积 M = Mn ·
Mn-1 · ... · M2 · M1 · M0 • 后⾯面的变换乘在前⾯面 1 0 10 0 1 10 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ i cos(30°) −sin(30°) 0 sin(30°) cos(30°) 0 0 0 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ Mtranslate · Mrotate O B
变换列表 OA 线性变换 • 表⽰示⼀一系列的变换,结 果为变换的矩阵的乘积 O B M =
Mn · Mn-1 · ... · M2 · M1 · M0 • 后⾯面的变换乘在前⾯面 O C Mtranslate · Mrotate Mrotate · Mtranslate • 顺序影响结果
前驱坐标系和图形的变换矩阵 线性变换 • 前驱坐标系:⽗父容器的坐标系 • 图形的变换矩阵M:⾃自⾝身坐标系到前驱坐标系的变换 • 变换的效果会叠加
前驱坐标系和图形的变换矩阵 线性变换 OB OA
前驱坐标系和图形的变换矩阵 线性变换 OB OA MA 1. 设置A的变换矩阵MA
OC 前驱坐标系和图形的变换矩阵 线性变换 OB OA MA 1. 设置A的变换矩阵MA 2. 把B放置在C中
前驱坐标系和图形的变换矩阵 线性变换 1. 设置A的变换矩阵MA 2. 把B放置在C中 3. 设置B的变换矩阵MB OC O
B O A M A MB 此时,OA 到OC 的变换为: MB·MA
Q&A