107 lines
3.2 KiB
C++
107 lines
3.2 KiB
C++
#include "Sub2Judge05Qxxs.h"
|
||
|
||
void Sub2Judge05Qxxs::dealDrawItem()
|
||
{
|
||
const TGPSPoints& left = m_model->left();
|
||
const TGPSPoints& right = m_model->right();
|
||
|
||
drawGpsLine(m_model->beg());
|
||
drawGpsLine(left);
|
||
drawGpsLine(right);
|
||
|
||
//drawGpsDashedLine(m_model->L1R1(), 5, false);
|
||
|
||
drawGpsSign(left.front(), "L");
|
||
drawGpsSign(left.back(), "L");
|
||
drawGpsSign(right.front(), "R");
|
||
drawGpsSign(right.back(), "R");
|
||
|
||
}
|
||
|
||
void Sub2Judge05Qxxs::dealJudgeItem()
|
||
{
|
||
HELP_COST_TIME("");
|
||
if(!m_car->rtkEnabled()) return;
|
||
|
||
//不能后退
|
||
JUDGE_MARK_ITEM_EASY_ONCE(pureBackoff(), MARK_SUB2_QXXS_41);
|
||
|
||
//中途停车扣分
|
||
JUDGE_MARK_ITEM_EASY_MORE(judgeStopover(), MARK_SUB2_QXXS_201);
|
||
|
||
//必须在最小的外接矩形内(用于训练,考试只要不合格,项目就不继续了)
|
||
JUDGE_MARK_ITEM_FORCED_END(!pureCarInItemArea(), MARK_SUB2_QXXS_41);
|
||
|
||
//每个阶段评判
|
||
JUDGE_STAGE_DO(m_stage);
|
||
|
||
//压线评判
|
||
judgeTouchLine();
|
||
|
||
//finally
|
||
JUDGE_CHECK_END();
|
||
}
|
||
|
||
JUDGE_STAGE_IMPL(Sub2Judge05Qxxs, Sub2QxxsStage0)
|
||
{
|
||
TGPSLine L1R1 = m_model->L1R1(); //L1R1的经纬度连线
|
||
if(IS_C1C2C5(m_carType))
|
||
{
|
||
static constexpr int history = 2; //计算历史两帧的
|
||
if(pureCarTouchAnyLine(L1R1, history))
|
||
{
|
||
m_stage = Sub2QxxsStage1;
|
||
}
|
||
}
|
||
}
|
||
|
||
JUDGE_STAGE_IMPL(Sub2Judge05Qxxs, Sub2QxxsStage1)
|
||
{
|
||
if(IS_A1A2A3B1B2(m_carType))
|
||
{
|
||
int gears = m_car->historyGears();
|
||
//防止挡位传感器错误,如果挡位传感器错误,值就是0 //0不判,大车过曲线必须是大于1档即2档及以上
|
||
//car.LowGrade是特定车型的及格分数,小车科目二80分及格。(大车科目二90分合格)(科目三都是90分及格)
|
||
JUDGE_MARK_ITEM_EASY_ONCE(gears == 1, MARK_SUB2_QXXS_202);
|
||
}
|
||
if(IS_C1C2C5(m_carType))
|
||
{
|
||
if(pureJudgeLeave())
|
||
{
|
||
m_stage = Sub2QxxsStage2;
|
||
}
|
||
}
|
||
}
|
||
|
||
JUDGE_STAGE_IMPL(Sub2Judge05Qxxs, Sub2QxxsStage2)
|
||
{
|
||
setState(itemStateEnd); //到达结束线阶段
|
||
}
|
||
|
||
void Sub2Judge05Qxxs::judgeTouchLine()
|
||
{
|
||
const TGPSPoints& left = m_model->left();
|
||
const TGPSPoints& right = m_model->right();
|
||
if(IS_C1C2C5(m_carType))
|
||
{
|
||
//1、车轮压线(纯粹车轮)只用车轮子计算
|
||
//注意:由于GPS可能漂移不能用这种方式计算,用历史车轮点判断会误判,无锡就出现这种情况 yhy 2025-04-23
|
||
//static constexpr int history = 2;
|
||
//const PointSets& wheels = m_car->carModel()->wheelAll();
|
||
//JUDGE_MARK_ITEM_EASY_ONCE(pureCarTouchSomePoints(left, wheels, history), MARK_SUB2_QXXS_61);
|
||
//JUDGE_MARK_ITEM_EASY_ONCE(pureCarTouchSomePoints(right, wheels, history), MARK_SUB2_QXXS_62);
|
||
|
||
//2、排线和边线相交,也算压线
|
||
const PointPairs& wind = m_car->carModel()->wheelWindAll();
|
||
JUDGE_MARK_ITEM_EASY_ONCE(pureCarTouchPairsPoints(left, wind), MARK_SUB2_QXXS_61);
|
||
JUDGE_MARK_ITEM_EASY_ONCE(pureCarTouchPairsPoints(right, wind), MARK_SUB2_QXXS_62);
|
||
|
||
}
|
||
}
|
||
|
||
bool Sub2Judge05Qxxs::judgeStopover()
|
||
{
|
||
return pureStopover() && m_car->historyMoveState() == moveForward;
|
||
}
|
||
|