說到矢量,不少人第一反應是 SVG,
SVG 的全稱是 Scalable Vector Graphics,html
意思爲可縮放的矢量圖形。
Vector 確實是 SVG 中重要的一部分,
但它的概念不止於此。bash
Vector -- 矢量
它還有一個叫法:向量。編輯器
說到這玩意,你們瞬間想起了被高數支配的恐懼。
沒錯,它能夠說是線性代數中老大哥的存在。
svg
wiki 上有關於線性代數的詳細介紹:動畫
不少相關資料會把線性代數和計算機圖形學聯繫起來,
它們之間究竟有什麼關係呢?spa
二維的原點 (0,0)
三維的原點 (0,0,0)
3d
把點與原點鏈接起來就造成向量,
向量表明一個有方向的長度,
對應標量。
code
元向量表示 X 或 Y 軸上一個單位的向量,
兩個元向量任意組合能夠表達二維面上的任何一個座標,
每一個向量也均可以拆分紅多個元向量的份量。
orm
把線和麪放在同個 tab 是由於這兩個東西的抽象意義是一致的。
它們表示必定條件下的元素合集,
在線性代數中咱們稱之爲向量空間
wiki 上有關於向量空間的詳細介紹:
cdn
這個矩陣表示是什麼意思呢?
它表示的是一個由兩個元向量組成的向量,
它在 X 和 Y 分別有 (2, 2) 兩個標量的份量。
這裏有兩個矩陣:
A * B 表明什麼呢?
咱們先畫一個座標系:
A * B 能夠理解爲,
B 做用於座標系的元向量產生一個新的座標系,
A 在新的座標系中的表現。
矩陣的大部分性質與維度無關,
以前咱們基於二維世界理解的矩陣,
放在三維世界中一樣適用。
舉個旋轉的栗子:
很眼熟有木有,
恭喜你理解了 Transform-3D 原理,
而這部分知識,在線性代數中稱之爲線性變換。
矢量在圖形渲染中也大有用途。
因爲屏幕物理結構限制,
絕大部分現代計算機顯示器都要將數據轉換成柵格圖像才能顯示,
用於計算的數據叫元數據,
計算得出的柵格圖像叫幀數據。
比起幀數據,矢量元數據使用更少的信息,
保存更多的參數用於目的幀渲染。
wiki 上有關於矢量圖形的詳細介紹:
若是用文本編輯器打開 SVG 文件(XML),
你會發現 SVG 中有一段:
M153 334
C153 334 151 334 151 334
C151 339 153 344 156 344
C164 344 171 339 171 334
C171 322 164 314 156 314
C142 314 131 322 131 334
C131 350 142 364 156 364
C175 364 191 350 191 334
C191 311 175 294 156 294
C131 294 111 311 111 334
C111 361 131 384 156 384
C186 384 211 361 211 334
C211 300 186 274 156 274
複製代碼
Stroke
Fill
結合上面講的 Transform 和矢量屬性效果,
咱們能夠完成計算機中幾乎全部的圖形繪製。
如下經過幾個常見動效,介紹動效的製做步驟:
React LOGO 能夠拆分紅四個部分,
裏面一個 Circle fill 的 Scale 動畫
外面三個環繞 Circle stroke path 並添加 Trim & Width 動畫
經過 SVGA Preview 咱們能夠清晰瞭解它的結構:
React LOGO 只使用矢量圖形屬性動畫。
Star moving 能夠拆分紅兩個部分:
使用矢量形狀繪製大小顏色不一的星星形狀
給星星逐個應用 Transform 動效向外位移。