为了计算贝塞尔曲线的长度,我一直在使用pyx。
from pyx import path, unit
bez = path.curve(p[0], p[1], p[0], p[1] + d, q[0], q[1]-d, q[0],q[1])
edgelen = unit.tocm(bez.arclen())
其中p
和q
是曲线的端点,d
是两个控制点相对位置的垂直偏移。(在我的应用程序中,曲线总是"向上"的)。
但是,我发现这个函数库对获取曲线长度的调用非常慢。是否有其他 python 库可能具有更好的性能?
我可能会使用 pypy 滚动我自己的贝塞尔可调用对象 - 我不记得前段时间我上图形课时特别困难。 如果你用纯python编码,pypy应该让它变得非常快。 如果 pypy 不是一种选择,那么将 cython 与 cpython 一起使用是下一个最好的选择。
我经常会采用一个纯 python 模块,并对其进行 m4 预处理,以获得同一事物的纯 python 和 cython 版本的通用代码。 它似乎工作得很好。 事实上,有时我什至会使用 m4 作为宏语言而不是 python,只是为了避免方法调用而不在模块的维护版本中复制代码。