我有一个XY点列表(trackP)的汽车轨道,我想“平滑”它。因为在pymunk (和其他物理引擎)中没有比polys (或片段)更复杂的形状,在我看来,我需要插值数据点,以删除尖锐的角.我怎么能这么做?我将需要这些知识,以产生“爬山赛车”赛道太(顺利的轨道,从设定的点)。目前我的跟踪(这是由seed生成的过程):跟踪
编辑:我找到了一个答案,这是chaikin的角切算法。下面是我来自这里的“分叉”代码
def chaikins_corner_cutting(coords, refinements=5):
coords.insert(0,coords[len(coords)-1])
coords.append(coords[1])
coords = np.array(coords)
for _ in range(refinements):
L = coords.repeat(2, axis=0)
R = np.empty_like(L)
R[0] = L[0]
R[2::2] = L[1:-1:2]
R[1:-1:2] = L[2::2]
R[-1] = L[-1]
coords = L * 0.75 + R * 0.25
coords2 = coords.tolist()
for i in range(2**refinements):
coords2.pop(0)
i+=1
for i in range(2**refinements):
coords2.pop(len(coords2)-1)
return coords2这是一些角度固定后的最终效果:

发布于 2022-02-03 13:23:39
我确信Python中的样条有很多实现。我最熟悉的一个是在SciPy中有效的:
https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.interpolate.spline.html
>>> import scipy.interpolate as spi
>>> x = [0,1,2,3]
>>> y = [1,5,3,4]
>>> fsmooth = spi.InterpolatedUnivariateSpline(x, y)
>>> fsmooth([0.5, 0.9, 1.1, 1.5])
array([4.3125, 5.0185, 4.9215, 4.1875])但是,这在数学意义上适用于函数y=f(x),对于每个x值,只访问一个y值。从这个意义上说,你的轨道不是一个函数。所以你需要先找一个不同的表示。
https://stackoverflow.com/questions/70970592
复制相似问题