Гладкая двухмерная броуновая прогулка с кривой Безье - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу сгенерировать движение Браунины, отраженное кривой Безье.У меня нет проблем с первой частью:

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

Но как мне сгладить этот путь, используя кривую Безье?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вы можете использовать сплайн Catmull-Rom для создания нескольких кубических кривых Безье, которые будут интерполировать вершины в вашем пути прогулки, и эти кривые Безье будут плавно соединены вместе.Пожалуйста, обратитесь к этой ссылке для более подробной информации.

0 голосов
/ 22 февраля 2019

Я не уверен, что вы действительно хотите использовать кривую Безье, поскольку кривые Безье не проходят все свои точки (см. Объяснение Википедии - даже в квадратичной кривой мы не делаемпройти среднюю точку, которая является просто «руководством»).См. Дополнительную информацию здесь .

Однако вы можете использовать некоторую математику, чтобы создать кривую Безье, которая плавно перемещается по всем вашим точкам.Для этого вам понадобится математика , чтобы выяснить, где разместить «направляющие», а затем вы можете нарисовать фактическую кривую Безье, используя код рисования Безье в matplotlib .

Если у вас все в порядке с любой плавной интерполяцией, а не только с кривыми Безье, тогда у scipy уже есть код для этого .

...