我想生成一个由Bézier曲线平滑的布朗运动。我对第一部分没有问题:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
def brownian(steps):
r = norm.rvs(size=(2,) + (steps,))
out = np.empty((2,steps))
np.cumsum(r, axis=-1, out=out)
out += np.expand_dims([0,0], axis=-1)
return out[0], out[1]
x, y = brownian(30)
plt.plot(x, y)
但是如何使用Bézier曲线平滑该路径?
我不确定你是否真的想使用贝塞尔曲线,因为贝塞尔曲线不能通过它们的所有点(参见Wikipedia explanation - 即使在二次曲线中我们也没有经过中间点,这只是一个“指南”)。查看更多信息here。
但是,您可以使用一些数学来创建一条贝塞尔曲线,该曲线可以平滑地移动您的所有点。要做到这一点,你需要一些math来找出放置“指南”的位置,然后你可以使用bezier drawing code in matplotlib绘制实际的贝塞尔曲线。
如果你对任何平滑插值都很好,而不仅仅是bezier曲线,那么scipy already has some code to do that。
您可以使用Catmull-Rom样条曲线创建多个三次贝塞尔曲线,这些曲线将在步行路径中插入顶点,这些贝塞尔曲线将平滑地连接在一起。有关更多详细信息,请参阅此link。