当前位置: 首页 > 面试题库 >

使用SciPy的Bézier曲线拟合

邴英毅
2023-03-14
问题内容

我有一组近似于2D曲线的点。我想将Python与numpy和scipy配合使用,以找到近似适合这些点的三次贝塞尔曲线路径,在该路径中,我指定两个端点的确切坐标,并返回其他两个控制点的坐标。

我最初以为scipy.interpolate.splprep()可以做我想做的事,但是似乎迫使曲线穿过每个数据点(因为我想您希望进行插值)。我以为我走错了路。

我的问题与此相似:如何将贝塞尔曲线拟合到一组数据?,除了他们说他们不想使用numpy。我的偏好是在scipy或numpy的某个地方找到我已经实现的东西。否则,我计划使用numpy来实现从该问题的答案之一链接的算法:一种自动拟合数字化曲线的算法(pdf。第622页)。

感谢您的任何建议!

编辑:我知道不能保证三次贝塞尔曲线都能通过所有点。我想要一个穿过两个给定端点的端点,并且该端点尽可能接近指定的内部点。


问题答案:

这是一段拟合点的python代码:

'''least square qbezier fit using penrose pseudoinverse
    >>> V=array
    >>> E,  W,  N,  S =  V((1,0)), V((-1,0)), V((0,1)), V((0,-1))
    >>> cw = 100
    >>> ch = 300
    >>> cpb = V((0, 0))
    >>> cpe = V((cw, 0))
    >>> xys=[cpb,cpb+ch*N+E*cw/8,cpe+ch*N+E*cw/8, cpe]            
    >>> 
    >>> ts = V(range(11), dtype='float')/10
    >>> M = bezierM (ts)
    >>> points = M*xys #produces the points on the bezier curve at t in ts
    >>> 
    >>> control_points=lsqfit(points, M)
    >>> linalg.norm(control_points-xys)<10e-5
    True
    >>> control_points.tolist()[1]
    [12.500000000000037, 300.00000000000017]

'''
from numpy import array, linalg, matrix
from scipy.misc import comb as nOk
Mtk = lambda n, t, k: t**(k)*(1-t)**(n-k)*nOk(n,k)
bezierM = lambda ts: matrix([[Mtk(3,t,k) for k in range(4)] for t in ts])
def lsqfit(points,M):
    M_ = linalg.pinv(M)
    return M_ * points

通常在bezier曲线上查看 动画bezier和
bezierinfo



 类似资料:
  • 问题内容: 对于使用6阶多项式插值非线性数据,我有一个非常具体的要求。我看过numpy / scipy例程(scipy.interpolate.InterpolatedUnivariateSpline),这些例程最多只能进行5级插值。 即使没有直接函数可以执行此操作,是否有办法在Python中复制Excel的LINEST线性回归算法?LINEST允许进行6度曲线拟合,但是我不希望将Excel用于任

  • 本文向大家介绍Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】,包括了Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现曲线拟合操作。分享给大家供大家参考,具体如下: 这两天学习了用python来拟合曲线。 一、环境配置 本人比较比较懒,所以下载的全部是

  • 错误:C:\用户\Aidan\Anaconda3\lib\site-包\sepy\优化\minpack.py:794: OptimizeWarning:参数的协方差无法估计 类别=OptimizeWarning) ---------------------------------------------------------------------------()14 plt中的TypeErro

  • 问题内容: 对于一个学校项目,我试图证明经济遵循相对正弦曲线的增长方式。除了它的经济性(公认的 狡猾)之外,我还在构建一个python模拟程序,以显示即使我们让某种程度的随机性成立,我们仍然可以产生相对 正弦的东西。我对自己生成的数据感到满意,但现在我想找到某种方法来获取与数据非常匹配的正弦图。我知道您 可以进行多项式拟合,但是您可以进行正弦拟合吗? 感谢您的帮助。让我知道您是否想查看代码的任何部

  • 问题内容: 我需要添加连接HTML中图表节点的曲线。我只想使用 HTML和/或CSS 创建它们。即使不是所有的浏览器都支持我需要的功能,我对CSS3还是可以的(特别是对IE8及以下版本不太在意)。这是我可以针对其使用的解决方案: canvas或svg- 不喜欢它,因为当我有好几千个(也许成千上万个)这些对象在我的漂亮节点之间浮动时,我不得不处理浏览器差异并且不确定性能 图像 -我需要大量图像来处理

  • 问题内容: 这是我声明曲线的代码行: 现在我可以使用什么代码来绘制曲线?我尝试了类似的东西: 但显然那没有用。有什么建议? 问题答案: 我已经做了一个最小的测试用例,以证明您在这里的描述。该程序可以运行,但是除非能看到您正在使用的代码,否则我无法真正为您提供帮助。