Python,如何转换x定义的样条线;NURB曲线中点的y列表

Python,如何转换x定义的样条线;NURB曲线中点的y列表,python,numpy,nurbs,Python,Numpy,Nurbs,是否可以将(x;y)坐标系转换为NURBS定义控制点和节点 主要的想法是,我正在尝试用python为air wind generator开发一个建模工具,我希望以NURBS曲面的形式对叶片进行数学建模,但定义叶片横截面的曲线将标准化为(x;y)坐标文件 现在,我将所有(x;y)点定义到2D Numpy数组中。您可以使用scipy.interpolate进行此操作 import numpy as np import matplotlib.pyplot as plt from scipy.inter

是否可以将(x;y)坐标系转换为NURBS定义控制点和节点

主要的想法是,我正在尝试用python为air wind generator开发一个建模工具,我希望以NURBS曲面的形式对叶片进行数学建模,但定义叶片横截面的曲线将标准化为(x;y)坐标文件


现在,我将所有(x;y)点定义到2D Numpy数组中。

您可以使用
scipy.interpolate
进行此操作

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import splev, splrep

x = np.linspace(0, 10, 10) # x-coordinates
y = np.sin(x) # y-coordinates
tck = splrep(x, y) # get bspline representation given (x,y) values
x2 = np.linspace(0, 10, 200) # new set of values, just to check
y2 = splev(x2, tck) # evaluate the y values of new coordinates on NURBS curve
plt.plot(x, y, 'o', x2, y2) 
plt.show()

元组
tck
包含节点向量和控制点(系数)。在SciPy中还有更多涉及的例程,看

请注意,这些仅适用于bspline曲线。据我所知,在SciPy中没有曲面的等效方法。如果要使用曲面,根据需要,可以使用


或者。对于更喜欢的东西,为所有NURBS曲线/曲面系列提供完整的Python API,后者基于这些API。

您确定需要NURBS曲面吗?据我所知, 与b样条曲面相比,它们的主要优点是可以精确建模 圆弧。我研究翼型已经很多年了,而圆弧并不是什么东西 这对我特别有用

无论如何,罗梅里克是正确的,他说对于曲面没有类似于scipy.interpolate.splprep的东西。 但如果你不反对自己滚动,你可以创建一个3D阵列 根据形状(3,m,n)的截面数据,其中“m”是每个截面的点数,“n”是 截面数,并且第一个尺寸标注在m x n栅格上保留x、y和z值。 一旦有了它,就可以使用
scipy.interpolate.RectBivariateSpline
创建 为x、y和z坐标创建3个单独的二维参数化曲面。然后写 一个类,用于将这些曲面组合到三维空间中的单个二维曲面中,以便在调用
mysurf.ev(0.5,0.2)
例如,它计算3
矩形二元样条线
实例嵌入到类中并返回(x,y,z)坐标

我已经发布了一个要点,可以让你开始。要尝试,请从命令行运行它,或执行以下操作:

from bsplinesurf import DemoBSplineSurf
srf = DemoBSplineSurf()
srf.plot()
from bsplinesurf import DemoBSplineSurf
srf = DemoBSplineSurf()
srf.plot()