b-spline python_在任意X坐标下确定BSpline的值

我已经在数据点xp和yp上创建了一个开放的、夹紧的、三次的b样条曲线。在

样条曲线由跨越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样条曲线的值。在

66mIT.png

提供一些有用的参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值