样条曲线由跨越xp域的向量u参数化。在
我的目标是确定b样条曲线在xp域中给定的x坐标下的y坐标。在
正如生成参数曲线时的预期行为,当我在计算tck后将值“4”传递到splev时,将返回与参数4对应的x和y坐标值。在
我可以用牛顿法来确定给定“x”坐标下参数u的值;但是这是间接的,需要比我最后的应用程序所允许的更多的计算时间。在
有谁能提出一个更直接的方法来确定给定“x”的b样条曲线上的“y”坐标吗?在import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
xp = [0., 0.71428571, 1.42857143, 2.14285714, 2.85714286, 3.57142857, 4.28571429, 5.]
yp = [0., -0.86217009, -2.4457478, -2.19354839, -2.32844575, -0.48680352, -0.41055718, -3.]
length = len(xp)
t = np.linspace(0., xp[-1], length - 2, endpoint=True)
t = np.append([0, 0, 0], t)
t = np.append(t, [xp[-1], xp[-1], xp[-1]])
tck = [t, [xp, yp], 3]
u = np.linspace(0, 5., 1000, endpoint=True)
out = interpolate.splev(u, tck)
x_value_in_xp_domain = 4.
y_value_out = interpolate.splev(x_value_in_xp_domain, tck)
plt.plot(xp, yp, linestyle='--', marker='o', color='purple')
plt.plot(out[0], out[1], color = 'teal')
plt.plot(x_value_in_xp_domain, y_value_out[1], marker='o', color = 'orangered')
plt.plot(y_value_out[0], y_value_out[1], marker='o', color = 'black')
plt.axvline(x=x_value_in_xp_domain, color = 'orangered')
plt.show()
下图显示了由上述代码生成的引导多边形和b样条曲线。x=4处的橙色点对应于我希望直接确定b样条曲线的y值的点。当值4作为参数传递时,黑点是b样条曲线的值。在
提供一些有用的参考:
我已经在数据点xp和yp上创建了一个开放的、夹紧的、三次的b样条曲线。在样条曲线由跨越xp域的向量u参数化。在我的目标是确定b样条曲线在xp域中给定的x坐标下的y坐标。在正如生成参数曲线时的预期行为,当我在计算tck后将值“4”传递到splev时,将返回与参数4对应的x和y坐标值。在我可以用牛顿法来确定给定“x”坐标下参数u的值;但是这是间接的,需要比我最后的应用程序所允许的更多的计算时间。在有谁...
Python
-B-
spline
-examples
Python
中关于使用 Numpy、Scipy 和 Matplotlib 评估和插
值
B 样条曲线及其比较的示例。
Python
2.7.x 或 3.xx,
Matplotlib
假设您已经对 B 样条曲线有所了解,否则请使用谷歌搜索或。
让我们考虑一个名为plist的 9 点列表:
plist = [( 3 , 1 ), ( 2.5 , 4 ), ( 0 , 1 ), ( - 2.5 , 4 ),( - 3 , 0 ), ( - 2.5 , - 4 ), ( 0 , - 1 ), ( 2.5 , - 4 ), ( 3 , - 1 ),]
我们将做两件事:
A. 绘制三次 B 样条曲线,其中plist是控制多边形。
B.查找(内插),并绘制B样条曲线,该曲线走线槽的plist点和或使用三次B样条曲
using namespace std;
const
int
window_size = 600;
int
last_x = -1, last_y = -1,n,choosenpo
int
=-1,button_down;
struct po
int
{
double x, y;
vector<poin
1)所设计的软件应具有图形化用户界面(GUI);
2)用户在软件界面上可用随机数方式或手工方式输入若干曲线或曲面的数据点,例如起点、终点、列表型
值
点等,对于曲线,还可设置步长参数;对于曲面,还可设置步长与行距参数;曲线或曲面的类型不限。
3)具有“绘制理想图形”按钮,用户完成数据点与参数输入后,点击该按钮,软件可绘制出理想的曲线或曲面,若该曲线或曲面有特征多边形,则还能通过...
功能:根据参数u
值
和k(大小为阶数
值
)与节点矢量,计算第i个k次B样条基数输入参数: u—参数
值
;k—大小
值
为阶数;i—第i个k次B样条的支撑区间左端节点的下标;aNode为节点向量。输出参数:返回函数
值
。double GetBaseFunVal(double u,
int
i,
int
k, vector <double> m_aNode)
double Val = 0.0;
个人博客:https://www.vectormoon.net/
Bezier曲线算法:https://www.vectormoon.net/2020/09/25/Bezier/
算法产生背景
Bezier曲线有以下几个不足点,所以导致出现了B-
spline
算法:
一旦
确定
特征多边形,就
确定
了曲线的阶次
Bezier曲线拼接复杂(需要满足几何连续性,参数连续性等)
Bezier曲线不能作局部修改(只能整体修改)
B-
spline
算法是整条曲线用一段一段的曲线连接而成,采用分段连续多段式生成
B-spli