智能车制作

标题: 曲率计算 [打印本页]

作者: 仁者    时间: 2010-5-15 16:57
标题: 曲率计算
下面是第三届东北大学三点法算曲率的代码


研究了一下,基本看不懂,只知道他是求的三角形外接圆半径作为曲率半径,大部分代码都是做处理的,确保取得点是正确的,里面有一点我的注释,不知正确与否(原文无一点注释),那位强人能帮忙讲下不???大家一起研究下




  1. //东北大学猎豹队
  2. /*
  3. void CountCurvature(uchar i1,uchar i2) // i1起始行,i2结束行
  4. {
  5. uchar mid; //临时值,辅助作用
  6. int dx1,dx2,dx3,dy1,dy2,dy3; //三点坐标,用起始行和结束行表示的???

  7. //应该是确保三点是稳定的点的

  8. if(i1>i2)
  9. { //i1>i2,则交换
  10. mid=i1;
  11. i1=i2;
  12. i2=mid;
  13. }
  14. //如果取得行数超过7行,则取中间行作为另一个点的位置
  15. if(i1+6<=i2)
  16. {
  17. mid=(uchar)((i1+i2)/2); //取始末点行数的一半为之间点的行数,为uchar型的


  18. dx1=(mid-i1)*3; //
  19. dx2=(i2-i1-1)*3;
  20. dx3=(i2-mid-1)*3;
  21. dy1=(BlackDrift[mid]+BlackDrift[mid+1]-BlackDrift[i1]-BlackDrift[i1+1])/2; //BlackDrift 黑线趋势
  22. dy2=(BlackDrift[i2]+BlackDrift[i2-1]-BlackDrift[i1]-BlackDrift[i1+1])/2;
  23. dy3=(BlackDrift[i2]+BlackDrift[i2-1]-BlackDrift[mid]-BlackDrift[mid+1])/2;


  24. PreCurvatureNum=dx1*dy2-dx2*dy1;
  25. dy1/=2;
  26. dy2/=2;
  27. dy3/=2;

  28. //Curvature 曲率

  29. PreCurvatureDen=(long)m_sqrt(dx1*dx1+dy1*dy1)*m_sqrt(dx2*dx2+dy2*dy2)*m_sqrt(dx3*dx3+dy3*dy3);
  30. if(PreCurvatureNum==0)
  31. Curvature=0;
  32. else
  33. {
  34. if(PreCurvatureDen>10000)
  35. {
  36. PreCurvatureNum=PreCurvatureNum*90/(PreCurvatureDen/100);
  37. Curvature=(int)PreCurvatureNum;
  38. }
  39. else
  40. {
  41. PreCurvatureNum=PreCurvatureNum*9000/PreCurvatureDen;
  42. Curvature=(int)PreCurvatureNum;
  43. }
  44. }
  45. if(Curvature<-99)
  46. Curvature=-99;
  47. else if(Curvature>99)
  48. Curvature=99;
  49. CurvatureCache[3]=CurvatureCache[2];
  50. CurvatureCache[2]=CurvatureCache[1];
  51. CurvatureCache[1]=CurvatureCache[0];
  52. if(i2-i1<=6)
  53. CurvatureCache[0]=(Curvature*5+CurvatureCache[1]*5)/10;
  54. else if(i2-i1<=10)
  55. CurvatureCache[0]=(Curvature*6+CurvatureCache[1]*4)/10;
  56. else if(i2-i1<=14)
  57. CurvatureCache[0]=(Curvature*7+CurvatureCache[1]*3)/10;
  58. else if(i2-i1<=18)
  59. CurvatureCache[0]=(Curvature*8+CurvatureCache[1]*2)/10;
  60. else
  61. CurvatureCache[0]=Curvature;
  62. if(CurvatureCache[0]>99)
  63. CurvatureCache[0]=99;
  64. else if(CurvatureCache[0]<-99)
  65. CurvatureCache[0]=-99;
  66. }
  67. DiffCurvature=(2*CurvatureCache[0]-CurvatureCache[1]-CurvatureCache[2])/3;
  68. }

复制代码

作者: 阿贵    时间: 2010-5-31 14:32
呵呵!
作者: ljl0731    时间: 2010-6-2 19:49
值得研究一下
作者: ljl0731    时间: 2010-6-2 19:49
值得研究一下
作者: zhangluhuixing    时间: 2010-6-3 11:19
很有用
作者: jiang1101    时间: 2010-7-12 19:31
关注
作者: hwqdg    时间: 2010-8-1 08:54
我已经在另一个帖子中进行了解释。

http://www.znczz.com/thread-13925-1-1.html
作者: 仁者    时间: 2010-8-3 21:39
回复 7# hwqdg


    谢了
作者: harry1874    时间: 2010-10-24 18:28
ding
作者: vernonji    时间: 2010-11-3 10:39
谢谢楼主
作者: 林显达    时间: 2010-11-18 13:05
呵呵
作者: Mousekeys    时间: 2011-4-3 19:28
值得研究
作者: lslk89    时间: 2011-4-4 11:48
学习学习
作者: m254366401    时间: 2011-4-17 15:59

作者: white1sky    时间: 2011-4-25 18:32
谢谢楼主的分享,值得研究一下~
作者: zdbkaka    时间: 2011-10-29 20:30
学习中
作者: 157688    时间: 2012-2-25 17:43

作者: dongyunlong    时间: 2012-3-5 09:51

作者: 745424772    时间: 2012-3-6 10:34
好啊很妙
作者: twking    时间: 2012-4-3 16:44
谢谢了

作者: knight9874@163.    时间: 2012-4-18 11:00
DING
作者: baobao    时间: 2012-5-7 17:20

作者: 封号式寂寞    时间: 2012-5-14 10:35

作者: yiqianlingyi    时间: 2012-11-20 13:42
没看懂!:L:L
作者: fn654    时间: 2012-12-13 20:09
没看懂+1

作者: 咪Luna~    时间: 2013-1-21 11:56
hwqdg 发表于 2010-8-1 08:54
我已经在另一个帖子中进行了解释。

http://www.znczz.com/thread-13925-1-1.html

你在这个帖子的解释http://www.znczz.com/forum.php?mod=viewthread&tid=10031  可不可以重新写下发给我!!谢谢!!!邮箱383290648@qq.com




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2