使用Bezier cu平滑2d布朗行走

2024-04-19 17:24:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想生成一个被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)

enter image description here

但是我怎样才能用贝塞尔曲线平滑这条路径呢?你知道吗


Tags: importnumpynormmatplotlibasnppltout
2条回答

您可以使用Catmull Rom spline创建多条三次Bezier曲线,这些曲线将在行走路径中对顶点进行插值,并且这些Bezier曲线将平滑地连接在一起。更多详情请参考link。你知道吗

我不确定您是否真的想使用贝塞尔曲线,因为贝塞尔曲线不会穿过所有的点(请参见Wikipedia explanation-即使在二次曲线中,我们也不会穿过中间点,这只是一个“指南”)。请参阅更多信息here。你知道吗

但是,您可以使用一些数学来创建一条贝塞尔曲线,该曲线可以平滑地穿过所有点。要做到这一点,您需要一些math来找出放置“辅助线”的位置,然后您可以使用bezier drawing code in matplotlib绘制实际的贝塞尔曲线。你知道吗

如果你对任何平滑插值都满意,而不仅仅是贝塞尔曲线,那么scipy already has some code to do that。你知道吗

相关问题 更多 >