样条曲线

样条曲线

贝塞尔曲线(bezier curve)

由线性插值而来的光滑曲线
插值公式 lerp(P0 ,P1 ,t) = P0 (1 - t)+ P1 t

三阶贝塞尔曲线

  • 插值表示法
    三阶贝塞尔曲线
    P代表控制点,t∈(0, 1)。
  • 伯恩斯坦表示法
    请添加图片描述
    基函数
    请添加图片描述
    代表了各个点的影响
  • 特征矩阵表示法
    请添加图片描述

贝塞尔曲线的不足

  • 控制能力不足:移动一个点会影响整条曲线
  • 只经过起点和终点

多条3阶贝塞尔曲线的拼接

参数t变为u,u取值从0到曲线条数,整数部分代表曲线索引,小数部分为每条曲线本地t值。
knot values :
knot interval:节点之间间隔
请添加图片描述

连续性的讨论

请添加图片描述

  • broken knot
    c0 连续
  • aligned
  • mirrored
    c1 连续
c1 连续

A‘(1) = B’(0) --> P4 = 2P3 - P2
A, B代表了相邻的两条曲线

c2 连续

A’‘(1) = B’'(0) --> P5 = P1 + 4(P3 - P2 )
牺牲控制能力来保证连续性。

几何连续性

请添加图片描述
2阶是曲率

Hermite Spline

请添加图片描述
指定起点,终点的位置速度得到。当我们将多条hermite曲线拼接,并使两条曲线结点处位置,速度相等:
请添加图片描述
hermite与 bezier的转换请添加图片描述

线性曲线

请添加图片描述

Cardinal Spline

指定每个点的位置,速度是邻近2点组成的向量再乘上一个缩放因子scale(端点处只有一个neibor,做neibor关于端点的镜像,从而得到端点的速度)。
曲线的随scale的变小变得平缓。
请添加图片描述

Catmull-Rom Spline

scale=0.5 的Cardinal Spline

B Spline

请添加图片描述

总结

请添加图片描述
参考
https://www.bilibili.com/video/BV1dP411r7Ve/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=578bc4faa4007385bf65652409031ed3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
样条曲线(Spline Curve)是一种在数学和计算机图形学中常见的高级曲线生成技术。它是一种连续的曲线,通过一系列控制点进行定义,这些控制点可以自由地移动,以改变曲线的形状。样条曲线在许多领域都有应用,包括计算机图形、物理模拟、数据插值等。 在Python中,有许多库可以用来创建样条曲线。其中最常用的是SciPy库中的`scipy.interpolate.UnivariateSpline`和`scipy.interpolate.BarycentricInterpolator`。 下面是一个使用`UnivariateSpline`创建样条曲线的简单示例: ```python from scipy.interpolate import UnivariateSpline import numpy as np # 定义控制点 control_points = np.array([[0, 0], [1, 1], [2, 2], [3, 3]]) # 创建样条曲线对象 spline = UnivariateSpline(control_points[:, 0], control_points[:, 1]) # 生成样条曲线上的点 x = np.linspace(0, 4, 1000) y = spline(x) # 绘制样条曲线 import matplotlib.pyplot as plt plt.plot(x, y) plt.show() ``` 在这个例子中,我们首先导入了必要的库,然后定义了一组控制点。我们使用这些控制点创建了一个`UnivariateSpline`对象,然后生成了一个在给定x值上的y值数组。最后,我们使用matplotlib库将样条曲线绘制出来。 请注意,样条曲线的形状取决于控制点的选择。通过移动和控制点,可以创建出各种形状的样条曲线样条曲线还有许多其他的应用,例如用于插值、拟合数据等。 如果你对更高级的样条曲线技术或更特定的应用场景感兴趣,你可能需要查阅更专门的库或教程。Python中有许多其他的库,如`curve_fit`(用于非线性拟合),以及专门用于插值和数据处理的库,如`scipy.interpolate`和`numpy`等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值