subject-two/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge05Qxxs.cpp
2025-05-06 14:49:05 +08:00

107 lines
3.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}