放一点写的辅助判断道路的函数,因为太多了就慢慢更吧。

//计算曲率
float process_curvity(int x1, int y1, int x2, int y2, int x3, int y3)
{float K;int S_of_ABC = ((x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)) / 2;//面积的符号表示方向float q1 = (float)((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));float AB = sqrt(q1);q1 = (float)((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));float BC = sqrt(q1);q1 = (float)((x3 - x1) * (x3 - x1) + (y3 - y1) * (y3 - y1));float AC = sqrt(q1);if (AB * BC * AC == 0){K = 0;}elseK = (float)4 * S_of_ABC / (AB * BC * AC);return K;
}

这个函数是输入三个点,计算曲率,返回值的K就是计算得到的曲率,纯算法就不写注释了,直接就能拿去用。不过最好还是自己写,加深一下了解,也不难。

//最小二乘法拟合,拟合y=kx+b,直线函数
参数(拟合的边线类型,开始的行数(y轴起始点)结束的行数(y轴的结束点))
无返回值,用于用最小二乘法计算从y=startline到y=endline,之间的所选定类型边线的斜率和截距说白了就是k和b,要是不懂最小二乘法的就百度一下,概念很简单
void regression(int type, int startline, int endline)
{int i = 0;int sumlines = endline - startline;int sumX = 0;int sumY = 0;float averageX = 0;float averageY = 0;float sumUp = 0;float sumDown = 0;if (type == 0)      //拟合中线{for (i = startline; i < endline; i++){sumX += i;sumY += centerline[i];}if (sumlines != 0){averageX = sumX / sumlines;     //x的平均值averageY = sumY / sumlines;     //y的平均值}else{averageX = 0;     //x的平均值averageY = 0;     //y的平均值}for (i = startline; i < endline; i++){sumUp += (centerline[i] - averageY) * (i - averageX);sumDown += (i - averageX) * (i - averageX);}if (sumDown == 0) parameterB = 0;else parameterB = sumUp / sumDown;parameterA = averageY - parameterB * averageX;
//b=y-k*x,这么看就会了吧,剩下的都一样,把这两个变量搞成全局变量,直接调用就行,不然你乐意用指针搞两个返回值也行}else if (type == 1)//拟合左线{for (i = startline; i < endline; i++){sumX += i;sumY += leftline[i];}if (sumlines == 0) sumlines = 1;averageX = sumX / sumlines;     //x的平均值averageY = sumY / sumlines;     //y的平均值for (i = startline; i < endline; i++){sumUp += (leftline[i] - averageY) * (i - averageX);sumDown += (i - averageX) * (i - averageX);}if (sumDown == 0) parameterB = 0;else parameterB = sumUp / sumDown;parameterA = averageY - parameterB * averageX;}else if (type == 2)//拟合右线{for (i = startline; i < endline; i++){sumX += i;sumY += rightline[i];}if (sumlines == 0) sumlines = 1;averageX = sumX / sumlines;     //x的平均值averageY = sumY / sumlines;     //y的平均值for (i = startline; i < endline; i++){sumUp += (rightline[i] - averageY) * (i - averageX);sumDown += (i - averageX) * (i - averageX);}if (sumDown == 0) parameterB = 0;else parameterB = sumUp / sumDown;parameterA = averageY - parameterB * averageX;}
}

下边的函数一样的东西,就是拟合的是y=a*x^2+b。先更这些吧,敲累了

//拟合一元二次函数,1组数据版
void LeastSquareCalc_Curve(int StartLine, int EndLine, int type)
{int i = 0;float Sum_X2 = 0, Sum_Y = 0, Sum_X4 = 0, Sum_YX2 = 0, Average_X2 = 0, Average_Y = 0, Average_X4 = 0, Average_YX2 = 0, Sum = 0;Sum = EndLine - StartLine;if (type == 1){for (i = StartLine; i < EndLine; i++){Sum_X2 += i * i;Sum_Y += leftline[i];Sum_X4 += i * i * i * i;Sum_YX2 += leftline[i] * i * i;}}else if (type == 2){for (i = StartLine; i < EndLine; i++){Sum_X2 += i * i;Sum_Y += rightline[i];Sum_X4 += i * i * i * i;Sum_YX2 += rightline[i] * i * i;}}else    //中线{for (i = StartLine; i < EndLine; i++){Sum_X2 += i * i;Sum_Y += centerline[i];Sum_X4 += i * i * i * i;Sum_YX2 += centerline[i] * i * i;}}Average_X2 = Sum_X2 / Sum;Average_Y = Sum_Y / Sum;Average_X4 = Sum_X4 / Sum;Average_YX2 = Sum_YX2 / Sum;curve_a = (Average_YX2 - Average_Y * Average_X2) / (Average_X4 - Average_X2 * Average_X2);//acurve_b = Average_Y - curve_a * Average_X2;//b}

摄像头道路辅助判断函数(持续更新)相关推荐

  1. [Linux学习]Shell脚本(1)--函数,输入,if判断(持续更新)+删除空行 +保存当前路径...

    1)接收输入 1 check_status() 2 { 3 echo --Check hi_repo status is ok? y or n 4 read var 5 if [ "$var ...

  2. PAT C++常用函数(持续更新)

    字符串处理 stoi(string) 字符转数字 string s = "0123456789"; cout << s << endl; cout < ...

  3. SKlearn中的函数学习总结(持续更新)

    关于SKlearn中的函数学习及关键代码部分,会持续更新 (参考sklearn官方文档) 一:分类.回归 二:降维 三:模型评估与选择 四:数据预处理 五:模型保存 大类 小类 适用问题 实现文档 说 ...

  4. Python爬虫及其它函数知识读记及简单用法,持续更新中...

    Python爬虫相关函数知识读记及简单用法,持续更新中- requests [riˈkwests] n. 请求,要求( request的名词复数 ): 需要: 所请求的事物: 申请书 函数或单词- 音 ...

  5. 工作中php遇到的问题以及常用函数整理(持续更新)

    说明 以下整理的文档是本人2017年从事php开发到目前遇到的问题的部分整理,因为上家公司有改错本这个东西,偶然间翻开,整理了一部分,后续遇到问题会持续更新,最新更新的内容会放到最前面. php开启错 ...

  6. Python连接Greenplum及常用gp函数和方法(持续更新)

    前言 了解postgresql Python连接gp 记录postgresql一些函数和方法(持续更新) ①:int类型时间转time类型时间 ②:合并两列值 ③:取最近N个月数据 ④:按指定字符串或 ...

  7. matlab cat函数_如何用Matlab编写贪吃蛇游戏?(持续更新)

    今后我们实验室的研究重点将会聚焦在"基于游戏的测评"和"教育游戏化"这两个主题上,因此很有必要研究实现"爆款"游戏的一些基本的技术方法.这篇 ...

  8. Matlab——常用函数的用法总结(部分直接摘自mathwork,持续更新)

    Matlab--常用函数的用法总结(部分直接摘自mathwork,持续更新) 文章目录 Matlab--常用函数的用法总结(部分直接摘自mathwork,持续更新) 一.绘图篇 1.图像显示形式 ①f ...

  9. C语言图形函数代码~持续更新中

    下面总结的是一些C语言图形函数代码~持续更新中 画三类圆 #include#include#include#include#includeint main(void) { initgraph(640, ...

最新文章

  1. 300米远程深度估计:港科大重磅开源自动驾驶深度感知新技术,远超现有雷达|CVPR2020...
  2. 安信可ESP-12F(ESP8266)介绍与使用
  3. python turtle画气球-使用python在mac上简单弹出气球消息
  4. hive和hbase区别和联系
  5. QT学习:监视文件和目录变化
  6. java线程池_Java 线程池 8 大拒绝策略,面试必问!
  7. 从冷战到深度学习,一文看懂机器翻译发展史
  8. 浏览器和node的eventLoop的区别
  9. b+树的增删改查_EF Core / 基础_从建库到增删改查
  10. C语言中16进制转字符串字符串转16进制
  11. Python tkinter(2)深入聊聊窗口
  12. angular烂笔头
  13. java计算机毕业设计校园共享单车系统源代码+系统+数据库+lw文档
  14. 如何到官网下载jqury
  15. 三款免费的AI绘画网站对比分析,真正好用的居然是它
  16. SHT11的C语言,用SHT11 构成的温湿度监测系统
  17. java 读取excel2007 内存不足_POI处理excel2007内存溢出问题
  18. JFinal极速开发框架使用初体验
  19. LINUX驱动开发(一)HelloWorld
  20. MacOS Terminal 常用快捷键大全

热门文章

  1. python是开源的、它可以被移植到许多平台上_python是开源的,它可以被移植到许多平台上,是对的吗?_后端开发...
  2. 汉化英文游戏有什么意义?
  3. python技能排名_Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
  4. dmidecode 查看系统硬件信息 - linux下的鲁大师
  5. Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)
  6. 如何接入阿里云短信服务 (完整指南)
  7. 九江大桥的设计和质量均没有问题
  8. 实现 LRU 缓存算法
  9. (Docker)Centos docker配置neo4j和mysql
  10. Mipi 接口 和 LVDS 接口区别