您现在的位置是:首页 >学无止境 >使用python编写的准均匀三次b样条曲线程序网站首页学无止境

使用python编写的准均匀三次b样条曲线程序

cyb_cqu 2023-06-06 16:00:02
简介使用python编写的准均匀三次b样条曲线程序

使用python 编写准均匀三次b样条曲线程序,并绘图

要使用Python编写准均匀三次B样条曲线程序并绘制图形,我们需要使用一些外部库,如NumPy和Matplotlib。以下是一个简单的示例来演示如何生成准均匀三次B样条曲线并绘制图形。

1. 首先,确保安装了NumPy和Matplotlib库。你可以使用以下命令安装它们

pip install numpy matplotlib

2. 接下来,创建一个Python脚本并导入所需库:

import numpy as np
import matplotlib.pyplot as plt

3.定义一个函数来计算准均匀三次B样条曲线的基函数。这里使用的是De Boor-Cox递归公式:

def de_boor_cox(x, k, i, t):
    if k == 0:
        return 1.0 if t[i] <= x < t[i+1] else 0.0
    else:
        num1 = (x - t[i]) * de_boor_cox(x, k-1, i, t)
        num2 = (t[i+k+1] - x) * de_boor_cox(x, k-1, i+1, t)
        den1 = t[i+k] - t[i]
        den2 = t[i+k+1] - t[i+1]
        term1 = num1 / den1 if den1 != 0 else 0
        term2 = num2 / den2 if den2 != 0 else 0
        return term1 + term2

4.定义一个函数来计算准均匀三次B样条曲线:

"""quasi-uniform b-spline curve"""
def cubic_bspline(t, control_points):
    n = len(control_points)
    k = 3
    x_points = []
    y_points = []

    for x in np.arange(t[k], t[-k-1], 0.01):
        x_point = 0
        y_point = 0
        for i in range(n):
            b = de_boor_cox(x, k, i, t)
            x_point += control_points[i][0] * b
            y_point += control_points[i][1] * b
        x_points.append(x_point)
        y_points.append(y_point)

    return x_points, y_points


5.定义一个函数来绘制准均匀三次B样条曲线:

def plot_bspline(control_points, x_points, y_points):
    control_points = np.array(control_points)

    plt.plot(control_points[:, 0], control_points[:, 1], 'ro-', label='Control Points')
    plt.plot(x_points, y_points, 'b-', label='B-spline Curve')

    plt.legend()
    plt.xlabel('X')
    plt.ylabel('Y')
    plt.title('Cubic B-spline Curve')
    plt.grid()
    plt.show()

"""plot t - f(t), x(t),y(t) """
def plot_points(t_v1,points,title = ""):
    plt.figure()
    plt.plot(t_v1, points, 'b-')
    plt.xlabel('t')
    plt.ylabel('f(t)')
    plt.title(title)
    plt.grid()

6.定义一个函数来绘制准均匀三次B样条曲线:

if __name__ == "__main__":
    control_points = [(0, 0), (2, 3), (4, 3), (6, 0), (8, -3), (10, -3)]
    n = len(control_points)
    k = 3

    # 生成均匀节点向量  len(t) ==  k + n - k + 1 + k  == k + n + 1
    t = np.concatenate((np.zeros(k), np.arange(n - k + 1), np.ones(k) * (n - k)), axis=0)
     print("t = ",t) #t =  [0. 0. 0. 0. 1. 2. 3. 3. 3. 3.]

    # 计算B样条曲线上的点
    x_points, y_points = cubic_bspline(t, control_points)

    # 绘制曲线
    plot_bspline(control_points, x_points, y_points)
    
	t_v1 = np.arange(t[k], t[-k - 1], 0.01)
    plot_points(t_v1,x_points,"t - x(t)")
    plot_points(t_v1,y_points,"t - y(t)")
    plt.show()

在这里插入图片描述
准均匀三次b样条曲线
在这里插入图片描述

现在,我们已经完成了使用Python编写的准均匀三次B样条曲线程序。当你运行这个程序时,它将使用给定的控制点计算曲线上的点,并使用Matplotlib库绘制曲线和控制点。在这个示例中,我们为曲线指定了一组控制点,但你可以根据需要更改控制点以生成不同的曲线。

注意,这个示例假设你已经安装了NumPy和Matplotlib库。如果你没有安装这些库,请参考上一部分的步骤1来安装它们。

参考

链接: B样条曲线(B-spline Curves)
链接: 运动规划——B样条曲线)

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。