将闭合曲线拟合到一组点

2023-11-27

我有一组点pts形成一个循环,看起来像这样:

enter image description here

这有点类似于31243002,但我不想将点放在点对之间,而是想通过点拟合一条平滑的曲线(坐标在问题末尾给出),所以我尝试了类似的方法scipy文档关于插值法:

values = pts
tck = interpolate.splrep(values[:,0], values[:,1], s=1)
xnew = np.arange(2,7,0.01)
ynew = interpolate.splev(xnew, tck, der=0)

但我收到此错误:

ValueError:输入数据错误

有什么办法可以找到这样的合适人选吗?

点的坐标:

pts = array([[ 6.55525 ,  3.05472 ],
   [ 6.17284 ,  2.802609],
   [ 5.53946 ,  2.649209],
   [ 4.93053 ,  2.444444],
   [ 4.32544 ,  2.318749],
   [ 3.90982 ,  2.2875  ],
   [ 3.51294 ,  2.221875],
   [ 3.09107 ,  2.29375 ],
   [ 2.64013 ,  2.4375  ],
   [ 2.275444,  2.653124],
   [ 2.137945,  3.26562 ],
   [ 2.15982 ,  3.84375 ],
   [ 2.20982 ,  4.31562 ],
   [ 2.334704,  4.87873 ],
   [ 2.314264,  5.5047  ],
   [ 2.311709,  5.9135  ],
   [ 2.29638 ,  6.42961 ],
   [ 2.619374,  6.75021 ],
   [ 3.32448 ,  6.66353 ],
   [ 3.31582 ,  5.68866 ],
   [ 3.35159 ,  5.17255 ],
   [ 3.48482 ,  4.73125 ],
   [ 3.70669 ,  4.51875 ],
   [ 4.23639 ,  4.58968 ],
   [ 4.39592 ,  4.94615 ],
   [ 4.33527 ,  5.33862 ],
   [ 3.95968 ,  5.61967 ],
   [ 3.56366 ,  5.73976 ],
   [ 3.78818 ,  6.55292 ],
   [ 4.27712 ,  6.8283  ],
   [ 4.89532 ,  6.78615 ],
   [ 5.35334 ,  6.72433 ],
   [ 5.71583 ,  6.54449 ],
   [ 6.13452 ,  6.46019 ],
   [ 6.54478 ,  6.26068 ],
   [ 6.7873  ,  5.74615 ],
   [ 6.64086 ,  5.25269 ],
   [ 6.45649 ,  4.86206 ],
   [ 6.41586 ,  4.46519 ],
   [ 5.44711 ,  4.26519 ],
   [ 5.04087 ,  4.10581 ],
   [ 4.70013 ,  3.67405 ],
   [ 4.83482 ,  3.4375  ],
   [ 5.34086 ,  3.43394 ],
   [ 5.76392 ,  3.55156 ],
   [ 6.37056 ,  3.8778  ],
   [ 6.53116 ,  3.47228 ]])

其实你的问题距离答案已经不远了。

Using scipy.interpolate.splprep对于参数 B 样条插值来说,这是最简单的方法。它本身也支持闭合曲线,如果您提供per=1范围,

import numpy as np
from scipy.interpolate import splprep, splev
import matplotlib.pyplot as plt

# define pts from the question

tck, u = splprep(pts.T, u=None, s=0.0, per=1) 
u_new = np.linspace(u.min(), u.max(), 1000)
x_new, y_new = splev(u_new, tck, der=0)

plt.plot(pts[:,0], pts[:,1], 'ro')
plt.plot(x_new, y_new, 'b--')
plt.show()

enter image description here

从根本上讲,这种方法与@Joe Kington 的答案中的方法没有太大不同。虽然,它可能会更稳健一些,因为相当于i默认情况下,根据点之间的距离而不仅仅是它们的索引来选择向量(请参阅splprep文档为了u范围)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将闭合曲线拟合到一组点 的相关文章

随机推荐

  • Firestore 规则模拟器 - 资源未定义

    我正在尝试使用 firebase 提供的新规则模拟器工具 但是在使其正常工作时遇到问题 在模拟器面板中这样设置路径时 users Gd9jd3jd8sSixxx38djSs 然后选择身份验证选项并输入授权用户的 uid 作为相同的字符串 G
  • 将 blob 文件上传到 Amazon s3

    我正在使用 ngCropImage 裁剪图像并希望将其上传this link NgCropImage 指令返回图像的 dataURI 我将其转换为 blob 转换后我得到一个 blob 对象 它具有大小和类型 使用以下代码将 DataURI
  • 如何修复:TypeError“元组”对象不支持项目分配[重复]

    这个问题在这里已经有答案了 本教程的以下代码片段 http www raywenderlich com 24252 beginning game programming for teens with python for badguy in
  • git Push 在 HTTP/1.1 100 之后挂在(哑)https 上继续

    我正在努力推动一些改变 但是git push挂起 当我跑步时git push 我没有看到任何输出 似乎什么也没有发生 没有任何活动top 并且没有发生任何事情的迹象 我不控制 git 托管服务 我正在使用 HTTPS URL 我相信托管服务
  • Tomcat连接池耗尽

    我在我的项目中使用 Apache Tomcat JDBC 连接池 我很困惑 因为在重负载下我不断看到以下错误 12 26 36 410 ERROR http XX XXX XXX X XXXXX X org apache tomcat jd
  • mysqldump 仅转储具有特定前缀的数据库

    我有大约 100 个不同的数据库 我想使用 mysqldump 转储以前缀 asd 开头的数据库 我尝试了这个 但它不起作用 mysqldump u user p pwd h server url asd single transactio
  • 在 Swift 中更改导航栏颜色

    我使用选择器视图来允许用户选择整个应用程序的颜色主题 我计划更改导航栏 背景和可能的选项卡栏的颜色 如果可能的话 我一直在研究如何做到这一点 但找不到任何 Swift 示例 谁能给我一个我需要用来更改导航栏颜色和导航栏文本颜色的代码示例 选
  • Angular 2 - Jquery | Angular 2 - Jquery | Angular 2 - Jquery | Angular 2 - Jquery使用鼠标位置添加样式(上/左)

    我正在寻找一种在 Angular 2 中的特定位置 鼠标事件 x y 添加 div 组件的方法 https jsfiddle net lennartquerter w2c7uqw6 this xPos xPos this yPos yPos
  • 在 Vim 中映射 Esc 键

    I m a beginning Vim user I hate pressing the Esc key which is a little far on my T61 In order to return to command mode
  • Android:EditText 中多行且无自动建议

    是否可以有一个允许多行且不显示建议的 EditText 我尝试使用以下代码 android inputType textFilter textMultiLine 我在这个中看到了question 但这对我不起作用 如果我尝试同时使用两者 E
  • 使用 Lodash 将 JavaScript 数组拆分为块

    我需要将 JavaScript 数组拆分为n大小的块 例如 给定这个数组 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 and a n等于 4 输出应该是这样的 a1 a2 a3 a4 a5 a6 a
  • Jquery——任何事件都会触发动作[重复]

    这个问题在这里已经有答案了 jquery 中是否有任何事件触发时会触发函数的东西 我想要这样的东西 anyEvent function error html on blur change click dblclick error focus
  • WKWebView reload() 无法刷新当前页面

    离线时第一次加载网页失败 然后我连接网络呼叫reload 刷新当前页面 但这不起作用 WKNavigationDelegate无法得到任何回调 功能reloadFromOrigin 也不工作 但医生说 abstract Reloads th
  • .net mvc 中从 Bootstrap 3.7 更新到 5.0.2 产生错误 - System.NullReferenceException

    我卸载了 net MVC 应用程序附带的基本引导模板 并从 NuGetPackage Manager 安装了引导程序 5 0 2 现在我在运行时遇到这个问题 构建正在成功发生 System NullReferenceException HR
  • 在 F# 中将列表拆分为两个相等的列表

    我对 F 确实很陌生 我需要一些关于 F 问题的帮助 我需要实现一个剪切函数 将列表分成两半 以便输出 切 1 2 3 4 5 6 val it int 列表 int 列表 1 2 3 4 5 6 我可以假设列表的长度是偶数 我还希望定义一
  • AutoMapper 如何根据上下文以不同方式将对象 A 映射到对象 B

    呼叫所有 AutoMapper 专家 我希望能够根据运行时的上下文以不同的方式将对象 A 映射到对象 B 特别是 我想忽略一种映射情况下的某些属性 并在另一种情况下映射所有属性 我遇到的是 Mapper CreateMap 可以在不同的映射
  • 是否可以关闭特定更新的休眠版本增量?

    是否可以使用休眠更新数据库中的实体而不修改实体的版本 使用我的 Web 应用程序 用户可以创建或更新实体 在任何用户操作之后 处理 这些实体的另一个异步进程在哪里 如果用户在实体 处理 之前打开实体进行更新 但在 处理 之后尝试保存实体 则
  • 在构建期间自动化 xsd.exe

    我需要一种在构建期间基于 xsd 文件自动重新生成 cs 文件的方法 最好不涉及任何自定义加载项 这也需要在 CI 构建上运行 我不确定我是否遗漏了一些明显的东西 或者这在我看来真的很棘手吗 我使用这个脚本 echo off cd 1 ca
  • 从 Typescript 中的 http url 导入 ES6 模块

    我正在编写一个 ES6 模块 它依赖于使用 http url 指定的其他 ES6 模块 如下所示 import el mount from https cdnjs cloudflare com ajax libs redom 3 26 0
  • 将闭合曲线拟合到一组点

    我有一组点pts形成一个循环 看起来像这样 这有点类似于31243002 但我不想将点放在点对之间 而是想通过点拟合一条平滑的曲线 坐标在问题末尾给出 所以我尝试了类似的方法scipy文档关于插值法 values pts tck inter