采用Bezier曲线平滑2d布朗式步行

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

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

但是如何使用Bézier曲线平滑该路径?

python bezier
2个回答
1
投票

我不确定你是否真的想使用贝塞尔曲线,因为贝塞尔曲线不能通过它们的所有点(参见Wikipedia explanation - 即使在二次曲线中我们也没有经过中间点,这只是一个“指南”)。查看更多信息here

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

如果你对任何平滑插值都很好,而不仅仅是bezier曲线,那么scipy already has some code to do that


1
投票

您可以使用Catmull-Rom样条曲线创建多个三次贝塞尔曲线,这些曲线将在步行路径中插入顶点,这些贝塞尔曲线将平滑地连接在一起。有关更多详细信息,请参阅此link

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