- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下数据:
x_old = [ 0.00000000e+00, -5.96880765e-24, -8.04361605e-23,
-2.11167774e-22, -2.30386081e-22, -7.86854147e-23,
1.17548440e-22, 1.93009272e-22, 1.49906866e-22,
9.66877465e-23, 1.48495705e-23]
y_old = [ 0. , 0.03711505, 0.03780602, 0.02524459, 0.01349815,
0.00964215, 0.00972842, 0.0168793 , 0.02577024, 0.02761626,
0.02141961]
z_old = [ 0. , 0.29834302, 0.59805918, 0.89773519, 1.19755092,
1.49749325, 1.79750314, 2.09741402, 2.39727031, 2.69726787,
2.99719479]
我想找到这些点之间的3-D
样条线,以便初始坐标(0, 0, 0)
保持固定(夹紧),另一端自由
。
我做到了:
from scipy.interpolate import splprep, splev
import numpy as np
# find the knot points
tckp,u = splprep([x_old,y_old,z_old],s=3.0,k=3,nest=-1)
# evaluate spline.
xnew,ynew,znew = splev(np.linspace(0,1,400),tckp)
图表:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
ax.plot(xnew, ynew, znew, label='first iteration')
plt.scatter(x_old, y_old, z_old, color='blue', label='given')
ax.legend()
plt.show()
问题 1。在上图中,初始点当然不是固定的。从数学上讲,我知道我需要指定边界条件,以便获得我想要的 3-D 样条线。我怎样才能在 scipy 中做到这一点?是否可以在 splprep
和 splev
中使用我可以指定的任何可选参数来实现此目的,或者我是否需要一种全新的方法来实现此目的?
问题 2:如果我希望两端都被夹紧,那么我该如何实现呢?
一些数学:“在初始点钳位”意味着初始点的一阶导数为零,“在终点自由”意味着那里的二阶导数为零。
最佳答案
看来你想要一个插值样条线,这意味着平滑参数 s 应设置为 0。
tckp, u = splprep([x_old,y_old,z_old], s=0.0, k=3, nest=-1)
可以使用 make_interp_spline
制作夹紧样条线(或具有其他边界条件的样条线) 。下面,参数l,r
是左端和右端的边界条件。我规定左端的一阶导数为零,右端的二阶导数为零。
l, r = [(1, (0, 0, 0))], [(2, (0, 0, 0))]
clamped_spline = make_interp_spline(u, np.array([x_old, y_old, z_old]).T, bc_type=(l, r))
xnew2, ynew2, znew2 = clamped_spline(np.linspace(0,1,400)).T
请注意,我使用了第一个样条线中的参数 u
,希望它比随机线性间隔数组的性能更好。 (u
是根据数据点计算的。)
绘制两者进行比较:
from mpl_toolkits.mplot3d import Axes3D as ax
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(xnew, ynew, znew, label='first iteration')
ax.plot(xnew2, ynew2, znew2, color='red', label='second iteration')
ax.scatter(x_old, y_old, z_old, color='blue', label='given')
ax.legend()
plt.show()
夹紧条件显然对该端附近有一些影响。
关于python - 使用 scipy.interpolate.splprep 和 splev 一端夹紧,另一端自由三次样条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47089749/
我刚刚开始学习 OpenGL 中的纹理并遇到了这个问题: 怀疑:函数 glEnableVertexAttribArray() 或 glVertexAttribPointer() 有问题 对于 Vert
我有一个 div 列表,我在其中显示较长文档的预览。这些文档使用不同的字体样式。所以我没有固定的行高。这是一个例子:http://jsfiddle.net/z56vn/ 我只需要显示每个文档的前几行。
我是一名优秀的程序员,十分优秀!