// // Created by zx on 2020/1/10. // #include "Railing.h" /* * 构造函数 * a,b,c代表栏杆所在直线方程, ax+by+c=0 * width:表示栏杆的宽 */ Railing::Railing(float a,float b,float c,float width) { m_a=a; m_b=b; m_c=c; m_width=width; } /* * 检验结果框,是否会与栏杆冲突 */ Error_manager Railing::verify(cv::RotatedRect rotate_rect) { //检验内部参数是否合法 if(m_a==0 && m_b==0) { return Error_manager(HARDWARE_LIMIT_RAILING_PARAMETER_ERROR,NORMAL,"railing parameter a&b = 0"); } //第一步,获取旋转矩形四个顶角 cv::Point2f vertice[4]; rotate_rect.points(vertice); //第二步.判断四个顶点是否在栏杆不同侧面,且与直线距离0) limit_right=true; else if(m_a*x+m_b*y+m_c<0) limit_left=true; } } //如果左右都有顶点, 则与栏杆碰撞 if(limit_left==true && limit_right==true) { return Error_manager(HARDWARE_LIMIT_RAILING_ERROR,NORMAL,"railing error"); } return SUCCESS; }