標籤:

筆記:Variable Font 的細節和「插值代數」

承上篇。

1. VF 的插值,如果跳開決議矩陣的那塊的話,就是一個簡單的線性泛函,只不過使用了帳篷函數給分段處理的情況拆開來「增維」。如果使用 Bra-ket 符號的話,算符Rleft|sright>會把樣式向量(定義在設計空間上)轉換為一個母版數加一維的權重向量(右矢)left|1,w1,...,w_Mright>,此向量的第一項總是 1,表示「默認設置」;而每個涉及插值的數值(坐標、尺寸等)則可以看作是一個左矢 left<x,delta_1,...,delta_Mright|。根據 TypeDrawers 上面的討論,同一個字元內涉及到的所有向量都是同維數的。因此,插值結果可以用langle x,delta|R|srangle=langle x,delta|1,wrangle表示。

2. 由線性泛函的性質就很容易導出:坐標和的左矢left<uright|+left<vright|=left<u+vright|,這個公式在處理 CFF2 的 blend 時候很有用,因為 blend 是對堆棧上的數值進行擾動,而 CFF 程序裡面堆棧上面全都是偏移量的。

3. 對於迭代 blend 算符的形式,由於left<left<x,delta|1,wright>,epsilon|1,wright>=left<x+left<delta|wright>,epsilon|1,wright>=x+left<delta|wright>+left<epsilon|wright>=left<x,delta+epsilon|1+wright>,故可以直接將微擾值求和即可。

4. 考慮某一維微擾是某個插值結果的情況,即x+left<delta_j,epsilon|1+wright>w_j+left<delta|wright>,可以看出它是等於x+left<delta|wright>+w_jleft<epsilon|wright>,即:我們可以通過將 blended result 作為 delta 的手段,將非線性內插引入 CFF2 輪廓描述的 Variable Font 中。// 這條發現可能會改變 otfcc 內部所有用於表示插值結果的數據結構。

5. 尚不清楚對於 CFF2 的 subroutine index 是否允許插值——如果允許這將讓人們可以創建有不同拓撲的 VF。

6. 列兩個 Open Question:

  • 對於某個(某些)m 維的函數Psileft|sright>(組),如何構造一個「好」的決議區間組R和左矢left<x,deltaright|(組),讓它可以用 前一節 裡面的公式進行近似?對單個函數的擬合適用於簡單的情況,多個函數的擬合則主要用於輪廓,特別是涉及到約束求解算出的輪廓。
  • 對於文件壓縮的話,如何合併相似的langle x,delta|R項(尤其是 R 部分相似者),或者處理比如去掉某些軸的情況?

推薦閱讀:

DriodSans與 Droid Sans Fallback之間的關係?
如何放大 Windows 8.1 的所有項目,並且字體不發虛?
有寶寶說:這樣的海報怎麼做?
Adobe 官網上這一款字體叫什麼?

TAG:字体 |