1、摘要

本文主要讲解:python_多点拟合二次曲线,再选取两边和中点拟合圆,计算曲率半径
主要思路:

  1. 使用numpy中的np.polyfit(x, y, 2)和 np.poly1d(f1)两个函数拟合二次函数
  2. 选取拟合的二次函数中的两边和中点拟合圆
  3. 利用这三点计算曲率半径
  4. 根据这些数据画拟合图

2、数据介绍

数据可使用任何列表数据

3、相关技术

np.polyfit多项式拟合,第三个参数为x的几次幂
np.poly1d得到多项式系数
np.matmul两个numpy数组的矩阵相乘

曲率半径

最小二乘法

4、完整代码和步骤

代码输出如下:标题为曲率半径的数值

主运行程序入口

from math import sqrtimport numpy as np
import numpy.linalg as LAimport matplotlib.pyplot as plt
from my_utils.read_write import readCsvsrc = 'D:\document\项目\\'def PJcurvature(x, y):"""输入:三点的坐标输出:曲率和标准方向"""t_a = LA.norm([x[1] - x[0], y[1] - y[0]])t_b = LA.norm([x[2] - x[1], y[2] - y[1]])M = np.array([[1, -t_a, t_a ** 2],[1, 0, 0],[1, t_b, t_b ** 2]])a = np.matmul(LA.inv(M), x)b = np.matmul(LA.inv(M), y)kappa = 2 * (a[2] * b[1] - b[2] * a[1]) / (a[1] ** 2. + b[1] ** 2.) ** (1.5)return kappa, [b[1], -a[1]] / np.sqrt(a[1] ** 2. + b[1] ** 2.)theta = [1.3, 1.3001, 1.3002]x = 5 * np.cos(theta)
y = 5 * np.sin(theta)# 半径 2326
def build_test():test = [9, 8, 8, 7, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12,12, 11, 11, 10, 9, 8, 8, 8, 8, 9, 9, 10, 10, 11, 11, 10, 10, 9, 8, 8, 8, 9, 10, 10, 11, 11, 12, 12, 12, 11,10, 9, 9, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 11, 10, 10, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 8, 8, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6,7, 7, 7, 7, 8, 8, 8, 8, 9, 8, 8, 8, 8, 9, 9, 9, 9, 9, 8, 8, 7, 7, 7, 7, 8, 8, 8, 7, 7, 6, 6, 6, 7, 7, 7, 8,8, 8, 8, 8, 7, 7, 7, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 7, 7,6, 6, 6, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 6, 6, 5, 5, 5, 5, 5, 5, 6,6, 5, 5, 5, 5, 5, 4, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 2, 2,2, 2, 2, 2, 3, 4, 4, 4, 3, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 5, 4, 4, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4,4, 3, 3, 2, 2, 2, 3, 3, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 6, 6, 5, 5,4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 0, 0, 0, 0,1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1]x = [i for i in range(len(test))]return [x, test]def build_function(x, y):f1 = np.polyfit(x, y, 2)print('参数 :\n', f1)p1 = np.poly1d(f1)print('y=', p1)yvals = p1(x)  # 拟合y值print('yvals is :\n', yvals)length = len(x)nhx = [x[0], x[int(length / 2)], x[length - 1]]nhy = [yvals[0], yvals[int(length / 2)], yvals[length - 1]]kappa, norm = PJcurvature(nhx, nhy)r = int(1 / kappa)title = '曲率半径(' + str(r) + ')'plt.plot(x, y, color="red", linewidth=1)plt.scatter(nhx, nhy, color="blue", alpha=0.5)plt.plot(x, yvals, color="orange", linewidth=2)plt.title(str(r))plt.ylabel('Height')plt.xlabel('X')filename = 'D:\document\\' + titleplt.savefig(filename)plt.show()return p1data = build_test()
build_function(data[0], data[1])

5、学习链接

【Python】车道线拟合曲线的曲率半径计算公式及代码

python_多点拟合曲线并计算曲率半径相关推荐

  1. 四阶行列式计算python_四阶行列式的计算题?

    展开全部 高阶的行列式基本不会人工计算,通常借助电脑程序62616964757a686964616fe78988e69d8331333433643131 以该题为例,Python中的命令是 impor ...

  2. R语言采用优化方法拟合曲线并计算AIC,BIC,LRT

    文章目录 前言 一.R代码实现 1.导入库 2.随机生成原始数据 3.RMSD 4.梯度下降 5.最大似然估计 6.做出优化后图像 7.求AIC,BIC 8.求LRT 二.运行结果 1.图像输出 2. ...

  3. 智慧交通day03-车道线检测实现07:车道曲率和中心点偏离距离计算+代码实现

    学习目标 知道车道曲率计算的方法 知道计算中心点偏离距离的计算 1.曲率的介绍 曲线的曲率就是针对曲线上某个点的切线方向角对弧长的转动率,通过微分来定义,表明曲线偏离直线的程度.数学上表明曲线在某一点 ...

  4. 自动驾驶道路曲率计算

    自动驾驶系列 车道曲率和中心点偏离距离计算 文章目录 自动驾驶系列 目标 一.曲率的介绍 圆的曲率 曲线的曲率 二.实现 1.计算曲率半径的方法,代码实现如下: 总结 目标 知道车道曲率计算的方法 知 ...

  5. 视图计算背后的技术架构思考

    简介:5G时代海量视图计算场景,阿里云边缘计算节点聚焦视频上云和处理方向,阿里云高级技术专家为您解读海量视图计算背后的技术与架构能力. >>发布会传送门:https://yqh.aliyu ...

  6. 用MATLAB语言求给定曲线曲率半径

    在 MATLAB 中,您可以使用一些工具来计算给定曲线的曲率半径.具体来说,您可以: 导入曲线的数据,并将其存储在 MATLAB 中的变量中. 使用已有的函数,例如 "diff" ...

  7. 小散量化炒股记|如何研判主力的踪迹!计算筹码分布图有妙用!

    前言 "筹码分布"自从问世以来一直受到广大投资者的追捧,它是把股票按不同价位上的流通数量做了排布,从而反映了这个股票对于全体投资者来说持仓成本的分布情况. 我们知道主力的常用手段是 ...

  8. 【Ray Tracing The Rest of Your Life】第2章 使用蒙特卡洛计算一重积分与球面积分

    这一章代码简单,但是理解起来颇有难度,又很重要,望仔细阅读. 代码使用VS2015编写. 链接:https://pan.baidu.com/s/1hmTUkAiXFd8Q0Lqy4Zt8bg  提取码 ...

  9. 【基尼系数】基尼系数的计算方法与计算案例

    洛伦茨曲线和基尼系数 1905年,统计学家洛伦茨提出了洛伦茨曲线,如图一.将社会总人口按收入由低到高的顺序平均分为10个等级组,每个等级组均占10%的人口,再计算每个组的收入占总收入的比重.然后以人口 ...

  10. 车道曲率和中心点偏离距离计算

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) CNN:RCNN.SPPNet.Fast RCNN.Faste ...

最新文章

  1. 人造神经元计算速度超过人脑
  2. Notepad++背景颜色设置
  3. Zabbix3.2安装
  4. unity中脚本编辑器UnIDE
  5. 第11章-img特征,vertical-align,cursor,opacity
  6. ajax post参数长度限制,Ajax中的POST数据大小是否有限制?
  7. 201521123060 《Java程序设计》第11周学习总结
  8. 50-00-040-配置-Flink Configuration简介
  9. IBM最新调研表明:大数据等于大回报
  10. 手机麦克风结构原理图_驻极体电容式麦克风结构和工作原理
  11. 服务器行业深度解析:服务器未来需求知多少
  12. 【ARM编程】ARM介绍
  13. 技术干货 | 基于 MindSpore 实现图像分割之平均表面距离
  14. 12.26:有一种关系叫做“乔布斯与比尔盖茨”
  15. SpringBoot上传图片问题
  16. MongoDB3:复制集
  17. Mac上Logi Options安装问题
  18. SQL实现排序,并输出序号
  19. 人机工程学座椅设计_办公座椅设计中人体工程学分析
  20. 推荐书籍《流畅的Python》

热门文章

  1. SpringAop_2通知(新手)和无法找到元素 'aop:aspectj-autoproxy' 的声明
  2. React Native布局实践:开发京东客户端首页遇到的坑
  3. php session fixation,什么是session fixation攻击
  4. win10电脑玩红警老是卡死怎么办?win10电脑玩红警老是卡死解决方法
  5. BZOJ1023 [SHOI2008]cactus仙人掌图
  6. Google Authenticator(谷歌身份验证器)
  7. h标签,b标签,em,i ,u,s标签
  8. 互不联网“拆墙”之后的新私域红利——许远东在第63届直播新零售千人峰会发言
  9. 阿里巴巴高德地图首席科学家任小枫:高精算法推动高精地图落地
  10. 预测模型如何改进自动化决策