为什么没有任何轮廓字体格式使用四阶或更高阶的贝塞尔曲线?

问题描述 投票:0回答:1

TrueType 使用二阶,OpenType 使用三阶。为什么不更高?

那是因为它们的渲染时间/空间复杂度太大了吗?在那种情况下,我想知道它们在大 O 符号中的复杂性。

fonts format complexity-theory bezier curve
1个回答
4
投票

你不能 design 使用更高阶的贝塞尔曲线,这仍然是创建字体最重要的方面。具有间接影响曲线的浮动控制点会使工作更难,而不是更容易。因此,虽然使用三次曲线而不是二次曲线具有客观价值(更好的弧近似、更简洁的曲线表达式等),但使用四次(或更高)而不是三次曲线并没有明显的好处。事实上,二次/立方可以依赖的一些属性不适用于四次或以上,在设计阶段需要缓慢和 cpu 密集型算法,客观上使它们更难使用。因此,没有人提出允许它们的系统。

至于复杂性:绘制曲线的最坏情况(使用

s
步骤的简单扁平化)具有
s
次(n-1)插值次(n-2)次插值等的复杂性,直到最终插值产生我们在
t
的坐标,即
s * n(n-1)/2
给我们一个O(n²)的大O符号。

虽然这里应该注意一些:在低

n
时,“好看”的曲线需要
s
的值,它可以 相当 比 n² 大,所以即使它在技术上是一个常数,它更有用看实际数字而不是大 O:

订单 坐标 插值 绘制曲线的插值次数 合理
s
2 3 2+1 3秒 8~16
3 4 3+2+1 6s 16~32
4 5 4+3+2+1 10s 32~64
5 6 5+4+3+2+1 15s ...
6 7 6+5+4+3+2+1 21s ...
7 8 ... 28s ...
8 ... ... 36s ...

曲线阶数越高,我们需要的步骤就越多,以确保事情看起来至少“合理”。

将其与使用“多个低阶曲线”进行比较:

立方数 绘制完整曲线的插值次数
2 12s
3 18s
4 24s
5 30s
6 36s
... ...

收益递减:使用三次 polyBeziers 绘制高阶曲线变得很多便宜,非常快。对于单个 8 阶贝塞尔曲线的相同价格,我们可以绘制 六个 三次贝塞尔曲线,并且当我们只想调整一小部分时,所得曲线将非常容易操作。

© www.soinside.com 2019 - 2024. All rights reserved.