Мне нужно нарисовать плавную кривую через некоторые точки, которую я затем хочу показать как путь SVG. Итак, я создаю B-сплайн с scipy.interpolate
и могу получить доступ к некоторым массивам, которые, я полагаю, полностью его определяют. Кто-нибудь знает достаточно простой способ создания кривых Безье из этих массивов?
import numpy as np
from scipy import interpolate
x = np.array([-1, 0, 2])
y = np.array([ 0, 2, 0])
x = np.r_[x, x[0]]
y = np.r_[y, y[0]]
tck, u = interpolate.splprep([x, y], s=0, per=True)
cx = tck[1][0]
cy = tck[1][1]
print( 'knots: ', list(tck[0]) )
print( 'coefficients x: ', list(cx) )
print( 'coefficients y: ', list(cy) )
print( 'degree: ', tck[2] )
print( 'parameter: ', list(u) )
Красные точки — это 3 начальные точки в x
и y
. Зеленые точки — это 6 коэффициентов в cx
и cy
. (Их значения повторяются после третьего, поэтому каждая зеленая точка имеет два зеленых индекса.)
Возвращаемые значения tck
и u
описаны scipy.interpolate.splprep
документация
knots: [-1.0, -0.722, -0.372, 0.0, 0.277, 0.627, 1.0, 1.277, 1.627, 2.0]
# 0 1 2 3 4 5
coefficients x: [ 3.719, -2.137, -0.053, 3.719, -2.137, -0.053]
coefficients y: [-0.752, -0.930, 3.336, -0.752, -0.930, 3.336]
degree: 3
parameter: [0.0, 0.277, 0.627, 1.0]