This commit is contained in:
lixiao 2025-04-11 16:47:55 +08:00
parent de722a15cf
commit 4344c389b0
11 changed files with 240 additions and 601 deletions

View File

@ -5,9 +5,9 @@
"name": "default",
"material": {
"certpath": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.cer",
"storePassword": "0000001B43E7BAC298C9D809E58E3491F350FD3506C77562C891A237D54C5C4733DEC67E0EBD3F450975F0",
"storePassword": "0000001B3420049DC7C5AF0BB88578D3A8346DDCD0E0CA25562A5558634CD9044933BA52474F87B9E07F32",
"keyAlias": "debugKey",
"keyPassword": "0000001B7F27FB3700AADDCB9A67C34A1F5CF3FF6D22B975EA6A9E0C532157D96C76F0B0378218C57462FC",
"keyPassword": "0000001B011F84A5952B68C41905A196EADE759B725C8E922F08D8AFD5EFCB71EF82352768670704E9A01B",
"profile": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.p7b",
"signAlg": "SHA256withECDSA",
"storeFile": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.p12"

View File

@ -27,7 +27,7 @@
#define JUDGE_VERSION_MAJOR 1
#define JUDGE_VERSION_MINOR 0
#define JUDGE_VERSION_PATCH 3
#define JUDGE_VERSION_STAMP "2504091313b"
#define JUDGE_VERSION_STAMP "2504110912b"
#if JUDGE_USE_OLD
# undef JUDGE_VERSION_STAMP
# define JUDGE_VERSION_STAMP "2411121010b.old"

View File

@ -508,6 +508,11 @@ bool ExamCarSub3::Init_KM3_Global()
m_car.XSJL = m_car.MFXX_XSJL;
}
if(m_stuInfo.zeng)
{
m_car.XSJL = m_car.Total_XSJL;
}
//注释改成:将之前的行驶里程减掉
if(m_stuInfo.yklc != 0)
{
@ -1952,15 +1957,15 @@ void ExamCarSub3::Calc_LaneDistance()
//Kind:1: 车身左1 2车身右1 3车身左2 4车身右2
ExamCarType cartype = carType();
int LeftBody1 = GetCarBodyPointNo(cartype, 1);
int LeftBody2 = GetCarBodyPointNo(cartype, 3);
int RightBody1 = GetCarBodyPointNo(cartype, 2);
int RightBody2 = GetCarBodyPointNo(cartype, 4);
int LeftFront = GetCarBodyPointNo(cartype, 1);
int LeftBack = GetCarBodyPointNo(cartype, 3);
int RightFront = GetCarBodyPointNo(cartype, 2);
int RightBack = GetCarBodyPointNo(cartype, 4);
if(LeftBody1 == -1 || LeftBody2 == -1 || RightBody1 == -1 || RightBody2 == -1)
if(LeftFront == -1 || LeftBack == -1 || RightFront == -1 || RightBack == -1)
{
logerror("cartype=%d,LeftBody1=%d, LeftBody2=%d, LeftBody2=%d, RightBody2=%d",
cartype, LeftBody1, LeftBody2, LeftBody2, RightBody2);
logerror("cartype=%d,LeftFront=%d, LeftBack=%d, RightFront=%d, RightBack=%d",
cartype, LeftFront, LeftBack, RightFront, RightBack);
return;
}
@ -2012,135 +2017,29 @@ void ExamCarSub3::Calc_LaneDistance()
if(p == 1) //1、车轮与本车道右侧距离
{
laneDriving = &road->BorderLines[0];
for(int k = 1; k <= 4; k++)
{
Pointi pt;
switch(k)
{
case 1: pt = body.ZQ_W_b; break; //CarStatus.CheLun_Wai_ZQ_RealTime;
case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime;
case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime;
case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime;
default: break;
}
line.PtBegin = body.b1_b; //CarStatus.BasePoint1_RealTime;
line.PtEnd = pt;
int dis = GpsMath::P2PDistance(pt, Lj.CenterPoint);
if(GpsMath::IsPtInArcLane(pt, poly))
{
int distance = std::abs(std::round(dis - Lj.Radius));
if(GpsMath::IsLineCrossArc(line, Lj))
{
distance = -distance;
}
switch(k)
{
case 1: RTKKM3.Wheel_LF_ToRightEdge = distance; break;
case 2: RTKKM3.Wheel_RF_ToRightEdge = distance; break;
case 3: RTKKM3.Wheel_LB_ToRightEdge = distance; break;
case 4: RTKKM3.Wheel_RB_ToRightEdge = distance; break;
default: break;
}
}
}
calcToDistanceArc(Lj, poly, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToRightEdge);
calcToDistanceArc(Lj, poly, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToRightEdge);
calcToDistanceArc(Lj, poly, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToRightEdge);
calcToDistanceArc(Lj, poly, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToRightEdge);
}
else if(p == 2) //2车轮与最右侧车道右侧距离
{
for(int k = 1; k <= 6; k++)
{
Pointi pt;
switch(k)
{
case 1: pt = body.ZQ_W_b; break; //CarStatus.CheLun_Wai_ZQ_RealTime;
case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime;
case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime;
case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime;
case 5: pt = body.points_b[RightBody1]; break; //20240801
case 6: pt = body.points_b[RightBody2]; break; //20240801
default: break;
}
line.PtBegin = body.b1_b; // CarStatus.BasePoint1_RealTime;
line.PtEnd = pt;
if(GpsMath::IsPtInPoly(pt.x, pt.y, road->Area.Pts))
{
int dis = GpsMath::P2PDistance(pt, L0.CenterPoint);
int distance = std::abs(std::round(dis - L0.Radius));
if(GpsMath::IsLineCrossArc(line, L0))
{
distance = -distance;
}
switch(k)
{
case 1: RTKKM3.Wheel_LF_ToBaseLine = distance; break;
case 2: RTKKM3.Wheel_RF_ToBaseLine = distance; break;
case 3: RTKKM3.Wheel_LB_ToBaseLine = distance; break;
case 4: RTKKM3.Wheel_RB_ToBaseLine = distance; break;
case 5: RTKKM3.Body_RF_ToBaseLine = distance; break; //20240801
case 6: RTKKM3.Body_RB_ToBaseLine = distance; break; //20240801
default: break;
}
}
}
calcToDistanceArc2(L0, road->Area, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToBaseLine);
calcToDistanceArc2(L0, road->Area, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToBaseLine);
calcToDistanceArc2(L0, road->Area, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToBaseLine);
calcToDistanceArc2(L0, road->Area, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToBaseLine);
calcToDistanceArc2(L0, road->Area, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToBaseLine); //20240801
calcToDistanceArc2(L0, road->Area, body.b1_b, body.points_b[RightBack], RTKKM3.Body_RB_ToBaseLine); //20240801
}
else if(p == 3) //3车身左侧与本车道左侧距离
{
for(int k = 1; k <= 2; k++)
{
Pointi pt;
switch(k)
{
case 1: pt = body.points_b[LeftBody1]; break;
case 2: pt = body.points_b[LeftBody2]; break;
default: break;
}
line.PtBegin = body.b1_b; //CarStatus.BasePoint1_RealTime;
line.PtEnd = pt;
if(GpsMath::IsPtInArcLane(pt, poly))
{
int dis = GpsMath::P2PDistance(pt, Lj1.CenterPoint);
int distance = std::abs(std::round(dis - Lj1.Radius));
if(GpsMath::IsLineCrossArc(line, Lj1))
{
distance = -distance;
}
switch(k)
{
case 1: RTKKM3.Body_LF_ToLeftEdge = distance; break;
case 2: RTKKM3.Body_LB_ToLeftEdge = distance; break;
default: break;
}
}
}
calcToDistanceArc(Lj1, poly, body.b1_b, body.points_b[LeftFront], RTKKM3.Body_LF_ToLeftEdge);
calcToDistanceArc(Lj1, poly, body.b1_b, body.points_b[LeftBack], RTKKM3.Body_LB_ToLeftEdge);
}
else if(p == 4) //4车身右侧与本车道右侧距离
{
for(int k = 1; k <= 2; k++)
{
Pointi pt;
switch(k)
{
case 1: pt = body.points_b[RightBody1]; break;
case 2: pt = body.points_b[RightBody2]; break;
default: break;
}
line.PtBegin = body.b1_b;
line.PtEnd = pt;
if(GpsMath::IsPtInArcLane(pt, poly))
{
int dis = GpsMath::P2PDistance(pt, Lj.CenterPoint);
int distance = std::abs(std::round(dis - Lj.Radius));
if(GpsMath::IsLineCrossArc(line, Lj))
{
distance = -distance;
}
switch(k)
{
case 1: RTKKM3.Body_RF_ToRightEdge = distance; break;
case 2: RTKKM3.Body_RB_ToRightEdge = distance; break;
default: break;
}
}
}
calcToDistanceArc(Lj, poly, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToRightEdge);
calcToDistanceArc(Lj, poly, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RB_ToRightEdge);
}
}
else
@ -2148,160 +2047,29 @@ void ExamCarSub3::Calc_LaneDistance()
if(p == 1) //1、车轮与本车道右侧距离
{
laneDriving = &road->BorderLines[0];
for(int k = 1; k <= 4; k++)
{
Pointi pt;
switch(k)
{
case 1: pt = body.ZQ_W_b; break; //CarStatus.CheLun_Wai_ZQ_RealTime;
case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime;
case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime;
case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime;
default: break;
}
line.PtBegin = body.b1_b;
line.PtEnd = pt;
if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true)
{
int distance = GpsMath::PointToSeg(pt, Lj);
if(distance == ERROR_JLCM)
{
distance = 0;
}
if(GpsMath::IsCross(line, Lj))
{
distance = -distance;
}
switch(k)
{
case 1: RTKKM3.Wheel_LF_ToRightEdge = distance; break;
case 2: RTKKM3.Wheel_RF_ToRightEdge = distance; break;
case 3: RTKKM3.Wheel_LB_ToRightEdge = distance; break;
case 4: RTKKM3.Wheel_RB_ToRightEdge = distance; break;
default: break;
}
}
}
calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToRightEdge);
calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToRightEdge);
calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToRightEdge);
calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToRightEdge);
}
else if(p == 2) //2车轮与最右侧车道右侧距离
{
for(int k = 1; k <= 6; k++)
{
Pointi pt;
switch(k)
{
case 1: pt = body.ZQ_W_b; break; //CarStatus.CheLun_Wai_ZQ_RealTime;
case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime;
case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime;
case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime;
case 5: pt = body.points_b[RightBody1]; break; //20240801
case 6: pt = body.points_b[RightBody2]; break; //20240801
default: break;
}
line.PtBegin = body.b1_b;
line.PtEnd = pt;
if(GpsMath::IsPtInPoly(pt.x, pt.y, road->Area.Pts))
{
int distance = GpsMath::PointToSeg(pt, L0);
if(distance == ERROR_JLCM)
{
distance = 0;
}
if(GpsMath::IsCross(line, L0))
{
distance = -distance;
}
switch(k)
{
case 1: RTKKM3.Wheel_LF_ToBaseLine = distance; break;
case 2: RTKKM3.Wheel_RF_ToBaseLine = distance; break;
case 3: RTKKM3.Wheel_LB_ToBaseLine = distance; break;
case 4: RTKKM3.Wheel_RB_ToBaseLine = distance; break;
case 5: RTKKM3.Body_RF_ToBaseLine = distance; break; //20240801
case 6: RTKKM3.Body_RB_ToBaseLine = distance; break; //20240801
default: break;
}
}
else
{
if(GpsMath::IsCross(line, L0))
{
int distance = -GpsMath::PointToSeg(pt, L0);
switch(k)
{
case 5: RTKKM3.Body_RF_ToBaseLine = distance; break; //20240801
case 6: RTKKM3.Body_RB_ToBaseLine = distance; break; //20240801
default: break;
}
}
}
}
calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToBaseLine);
calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToBaseLine);
calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToBaseLine);
calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToBaseLine);
calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToBaseLine, true); //20240801
calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.points_b[RightBack], RTKKM3.Body_RB_ToBaseLine, true); //20240801
}
else if(p == 3) //3车身左侧与本车道左侧距离
{
for(int k = 1; k <= 2; k++)
{
Point pt;
switch(k)
{
case 1: pt = body.points_b[LeftBody1]; break;
case 2: pt = body.points_b[LeftBody2]; break;
default: break;
}
line.PtBegin = body.b1_b;
line.PtEnd = pt;
if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true)
{
int distance = GpsMath::PointToSeg(pt, Lj1);
if(distance == ERROR_JLCM)
{
distance = 0;
}
if(GpsMath::IsCross(line, Lj1))
{
distance = -distance;
}
switch(k)
{
case 1: RTKKM3.Body_LF_ToLeftEdge = distance; break;
case 2: RTKKM3.Body_LB_ToLeftEdge = distance; break;
default: break;
}
}
}
calcToDistanceLine(Lj1, poly.Pts, body.b1_b, body.points_b[LeftFront], RTKKM3.Body_LF_ToLeftEdge);
calcToDistanceLine(Lj1, poly.Pts, body.b1_b, body.points_b[LeftBack], RTKKM3.Body_LB_ToLeftEdge);
}
else if(p == 4) //4车身右侧与本车道右侧距离
{
for(int k = 1; k <= 2; k++)
{
Point pt;
switch(k)
{
case 1: pt = body.points_b[RightBody1]; break;
case 2: pt = body.points_b[RightBody2]; break;
default: break;
}
line.PtBegin = body.b1_b;
line.PtEnd = pt;
if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true)
{
int distance = GpsMath::PointToSeg(pt, Lj);
if(distance == ERROR_JLCM)
{
distance = 0;
}
if(GpsMath::IsCross(line, Lj))
{
distance = -distance;
}
switch(k)
{
case 1: RTKKM3.Body_RF_ToRightEdge = distance; break;
case 2: RTKKM3.Body_RB_ToRightEdge = distance; break;
default: break;
}
}
}
calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToRightEdge);
calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.points_b[RightBack], RTKKM3.Body_RB_ToRightEdge);
}
}
}
@ -5183,7 +4951,7 @@ void ExamCarSub3::playItemSound(TKM3Item* item, bool enter)
}
else if(item->ItemNo == Sub3ItemType13Yjxs)
{
code = sou;
//code = sou; //夜间行驶项目不播报开始和结束语音
}
else if(item->ItemNo == Sub3ItemType14Jjdw)
{
@ -5307,6 +5075,78 @@ void ExamCarSub3::dealItemNoIDEnd14Jjdw()
}
}
bool ExamCarSub3::calcToDistanceArc(const TModelLine& Lxx, const TModelPolygon& poly, const Pointi& b1, const Pointi& pt, int& dm, bool cross)
{
TModelLine line;
line.PtBegin = b1; //CarStatus.BasePoint1_RealTime;
line.PtEnd = pt;
if(GpsMath::IsPtInArcLane(pt, poly))
{
int dis = GpsMath::P2PDistance(pt, Lxx.CenterPoint);
int distance = std::abs(std::round(dis - Lxx.Radius));
if(GpsMath::IsLineCrossArc(line, Lxx))
{
distance = -distance;
}
dm = distance;
return true;
}
return false;
}
bool ExamCarSub3::calcToDistanceArc2(const TModelLine& Lxx, const TModelPolygon& area, const Pointi& b1, const Pointi& pt, int& dm, bool cross)
{
TModelLine line;
line.PtBegin = b1; //CarStatus.BasePoint1_RealTime;
line.PtEnd = pt;
if(GpsMath::IsPtInPoly(pt.x, pt.y, area.Pts))
{
int dis = GpsMath::P2PDistance(pt, Lxx.CenterPoint);
int distance = std::abs(std::round(dis - Lxx.Radius));
if(GpsMath::IsLineCrossArc(line, Lxx))
{
distance = -distance;
}
dm = distance;
return true;
}
return false;
}
bool ExamCarSub3::calcToDistanceLine(const TModelLine& Lxx, const std::vector<Pointi>& Pts, const Pointi& b1, const Pointi& pt, int& dm, bool cross)
{
TModelLine line;
line.PtBegin = b1;
line.PtEnd = pt;
if(GpsMath::IsPtInPoly(pt.x, pt.y, Pts))
{
int distance = GpsMath::PointToSeg(pt, Lxx);
if(distance == ERROR_JLCM)
{
distance = 0;
}
if(GpsMath::IsCross(line, Lxx))
{
distance = -distance;
}
dm = distance;
return true;
}
else
{
if(cross)
{
if(GpsMath::IsCross(line, Lxx))
{
int distance = -GpsMath::PointToSeg(pt, Lxx);
dm = distance;
return true;
}
}
}
return false;
}
DriveDirType ExamCarSub3::driveDirection(const TModelLine* lane)
{
//ptBegin 车道线起始点
@ -5838,15 +5678,15 @@ void ExamCarSub3::Calc_LaneDistance_Tail()
if(RTKKM3_Tail.LaneIndex == INVALID_INDEX) return;
//Kind:1: 车身左1 2车身右1 3车身左2 4车身右2
int LeftBody1 = GetCarBodyPointNo(cartype, 1, true);
int LeftBody2 = GetCarBodyPointNo(cartype, 3, true);
int RightBody1 = GetCarBodyPointNo(cartype, 2, true);
int RightBody2 = GetCarBodyPointNo(cartype, 4, true);
int LeftFront = GetCarBodyPointNo(cartype, 1, true);
int LeftBack = GetCarBodyPointNo(cartype, 3, true);
int RightFront = GetCarBodyPointNo(cartype, 2, true);
int RightBack = GetCarBodyPointNo(cartype, 4, true);
if(LeftBody1 == -1 || LeftBody2 == -1 || RightBody1 == -1 || RightBody2 == -1)
if(LeftFront == -1 || LeftBack == -1 || RightFront == -1 || RightBack == -1)
{
logerror("cartype=%d,LeftBody1=%d, LeftBody2=%d, LeftBody2=%d, RightBody2=%d",
cartype, LeftBody1, LeftBody2, LeftBody2, RightBody2);
logerror("cartype=%d,LeftFront=%d, LeftBack=%d, RightFront=%d, RightBack=%d",
cartype, LeftFront, LeftBack, RightFront, RightBack);
return;
}
@ -5898,266 +5738,52 @@ void ExamCarSub3::Calc_LaneDistance_Tail()
if(p == 1) //1、车轮与本车道右侧距离
{
laneDriving = &road->BorderLines[0];
for(int k = 3; k <= 4; k++)
{
Pointi pt;
switch(k)
{
case 3: pt = body.ZH_W_b_G; break; //GuaCheStatus.CheLun_Wai_ZH_RealTime;
case 4: pt = body.YH_W_b_G; break; //GuaCheStatus.CheLun_Wai_YH_RealTime;
default: break;
}
line.PtBegin = body.b1_b_G; //GuaCheStatus.BasePoint1_RealTime;
line.PtEnd = pt;
int dis = GpsMath::P2PDistance(pt, Lj.CenterPoint);
if(GpsMath::IsPtInArcLane(pt, poly))
{
int distance = std::abs(std::round(dis - Lj.Radius));
if(GpsMath::IsLineCrossArc(line, Lj))
{
distance = -distance;
}
switch(k)
{
case 3: RTKKM3_Tail.Wheel_LB_ToRightEdge = distance; break;
case 4: RTKKM3_Tail.Wheel_RB_ToRightEdge = distance; break;
default: break;
}
}
}
calcToDistanceArc(Lj, poly, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToRightEdge);
calcToDistanceArc(Lj, poly, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToRightEdge);
}
else if(p == 2) //2车轮与最右侧车道右侧距离
{
for(int k = 3; k <= 4; k++)
{
Pointi pt;
switch(k)
{
case 3: pt = body.ZH_W_b_G; break; //GuaCheStatus.CheLun_Wai_ZH_RealTime;
case 4: pt = body.YH_W_b_G; break; //GuaCheStatus.CheLun_Wai_YH_RealTime;
default: break;
}
line.PtBegin = body.b1_b_G; // GuaCheStatus.BasePoint1_RealTime;
line.PtEnd = pt;
if(GpsMath::IsPtInPoly(pt.x, pt.y, road->Area.Pts))
{
int dis = GpsMath::P2PDistance(pt, L0.CenterPoint);
int distance = std::abs(std::round(dis - L0.Radius));
if(GpsMath::IsLineCrossArc(line, L0))
{
distance = -distance;
}
switch(k)
{
case 3: RTKKM3_Tail.Wheel_LB_ToBaseLine = distance; break;
case 4: RTKKM3_Tail.Wheel_RB_ToBaseLine = distance; break;
default: break;
}
}
}
calcToDistanceArc2(L0, road->Area, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine);
calcToDistanceArc2(L0, road->Area, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine);
}
else if(p == 3) //3车身左侧与本车道左侧距离
{
for(int k = 1; k <= 2; k++)
{
Pointi pt;
switch(k)
{
case 1: pt = body.points_b[LeftBody1]; break;
case 2: pt = body.points_b[LeftBody2]; break;
default: break;
}
line.PtBegin = body.b1_b_G; //CarStatus.BasePoint1_RealTime;
line.PtEnd = pt;
if(GpsMath::IsPtInArcLane(pt, poly))
{
int dis = GpsMath::P2PDistance(pt, Lj1.CenterPoint);
int distance = std::abs(std::round(dis - Lj1.Radius));
if(GpsMath::IsLineCrossArc(line, Lj1))
{
distance = -distance;
}
switch(k)
{
case 1: RTKKM3_Tail.Body_LF_ToLeftEdge = distance; break;
case 2: RTKKM3_Tail.Body_LB_ToLeftEdge = distance; break;
default: break;
}
}
}
calcToDistanceArc(Lj1, poly, body.b1_b_G, body.points_b[LeftFront], RTKKM3_Tail.Body_LF_ToLeftEdge);
calcToDistanceArc(Lj1, poly, body.b1_b_G, body.points_b[LeftBack], RTKKM3_Tail.Body_LB_ToLeftEdge);
}
else if(p == 4) //4车身右侧与本车道右侧距离
{
for(int k = 1; k <= 2; k++)
{
Pointi pt;
switch(k)
{
case 1: pt = body.points_b[RightBody1]; break;
case 2: pt = body.points_b[RightBody2]; break;
default: break;
}
line.PtBegin = body.b1_b_G;
line.PtEnd = pt;
if(GpsMath::IsPtInArcLane(pt, poly))
{
int dis = GpsMath::P2PDistance(pt, Lj.CenterPoint);
int distance = std::abs(std::round(dis - Lj.Radius));
if(GpsMath::IsLineCrossArc(line, Lj))
{
distance = -distance;
}
switch(k)
{
case 1: RTKKM3_Tail.Body_RF_ToRightEdge = distance; break;
case 2: RTKKM3_Tail.Body_RB_ToRightEdge = distance; break;
default: break;
}
}
}
calcToDistanceArc(Lj, poly, body.b1_b_G, body.points_b[RightFront], RTKKM3_Tail.Body_RF_ToRightEdge);
calcToDistanceArc(Lj, poly, body.b1_b_G, body.points_b[RightBack], RTKKM3_Tail.Body_RB_ToRightEdge);
}
}
else
{
laneDriving = &road->BorderLines[0];
if(p == 1) //1、车轮与本车道右侧距离
{
for(int k = 3; k <= 4; k++)
{
Pointi pt;
switch(k)
{
case 3: pt = body.ZH_W_b_G; break; //GuaCheStatus.CheLun_Wai_ZH_RealTime;
case 4: pt = body.YH_W_b_G; break; //GuaCheStatus.CheLun_Wai_YH_RealTime;
default: break;
}
line.PtBegin = body.b1_b_G;
line.PtEnd = pt;
if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true)
{
int distance = GpsMath::PointToSeg(pt, Lj);
if(distance == ERROR_JLCM)
{
distance = 0;
}
if(GpsMath::IsCross(line, Lj))
{
distance = -distance;
}
switch(k)
{
case 3: RTKKM3_Tail.Wheel_LB_ToRightEdge = distance; break;
case 4: RTKKM3_Tail.Wheel_RB_ToRightEdge = distance; break;
default: break;
}
}
}
laneDriving = &road->BorderLines[0];
calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToRightEdge);
calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToRightEdge);
}
else if(p == 2) //2车轮与最右侧车道右侧距离
{
for(int k = 3; k <= 4; k++)
{
Pointi pt;
switch(k)
{
case 3: pt = body.ZH_W_b_G; break; //GuaCarStatus.CheLun_Wai_ZH_RealTime;
case 4: pt = body.YH_W_b_G; break; //GuaCarStatus.CheLun_Wai_YH_RealTime;
default: break;
}
line.PtBegin = body.b1_b_G;
line.PtEnd = pt;
if(GpsMath::IsPtInPoly(pt.x, pt.y, road->Area.Pts))
{
int distance = GpsMath::PointToSeg(pt, L0);
if(distance == ERROR_JLCM)
{
distance = 0;
}
if(GpsMath::IsCross(line, L0))
{
distance = -distance;
}
switch(k)
{
case 3: RTKKM3_Tail.Wheel_LB_ToBaseLine = distance; break;
case 4: RTKKM3_Tail.Wheel_RB_ToBaseLine = distance; break;
default: break;
}
}
}
calcToDistanceLine(L0, road->Area.Pts, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine);
calcToDistanceLine(L0, road->Area.Pts, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine);
}
else if(p == 3) //3车身左侧与本车道左侧距离
{
for(int k = 1; k <= 2; k++)
{
Point pt;
switch(k)
{
case 1: pt = body.points_b[LeftBody1]; break;
case 2: pt = body.points_b[LeftBody2]; break;
default: break;
}
line.PtBegin = body.b1_b_G;
line.PtEnd = pt;
if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true)
{
int distance = GpsMath::PointToSeg(pt, Lj1);
if(distance == ERROR_JLCM)
{
distance = 0;
}
if(GpsMath::IsCross(line, Lj1))
{
distance = -distance;
}
switch(k)
{
case 1: RTKKM3_Tail.Body_LF_ToLeftEdge = distance; break;
case 2: RTKKM3_Tail.Body_LB_ToLeftEdge = distance; break;
default: break;
}
}
}
calcToDistanceLine(Lj1, poly.Pts, body.b1_b_G, body.points_b[LeftFront], RTKKM3_Tail.Body_LF_ToLeftEdge);
calcToDistanceLine(Lj1, poly.Pts, body.b1_b_G, body.points_b[LeftBack], RTKKM3_Tail.Body_LB_ToLeftEdge);
}
else if(p == 4) //4车身右侧与本车道右侧距离
{
for(int k = 1; k <= 2; k++)
{
Point pt;
switch(k)
{
case 1: pt = body.points_b[RightBody1]; break;
case 2: pt = body.points_b[RightBody2]; break;
default: break;
}
line.PtBegin = body.b1_b_G;
line.PtEnd = pt;
if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true)
{
int distance = GpsMath::PointToSeg(pt, Lj);
if(distance == ERROR_JLCM)
{
distance = 0;
}
if(GpsMath::IsCross(line, Lj))
{
distance = -distance;
}
switch(k)
{
case 1: RTKKM3_Tail.Body_RF_ToRightEdge = distance; break;
case 2: RTKKM3_Tail.Body_RB_ToRightEdge = distance; break;
default: break;
}
}
}
calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.points_b[RightFront], RTKKM3_Tail.Body_RF_ToRightEdge);
calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.points_b[RightBack], RTKKM3_Tail.Body_RB_ToRightEdge);
}
}
}
}
}
}
void ExamCarSub3::Calc_CheShenYaXian_Tail()

View File

@ -80,6 +80,9 @@ protected:
void dealItemNoIDEndItem();
void dealItemNoIDEnd14Jjdw();
bool calcToDistanceArc(const TModelLine& Lxx, const TModelPolygon& poly, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false);
bool calcToDistanceArc2(const TModelLine& Lxx, const TModelPolygon& area, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false);
bool calcToDistanceLine(const TModelLine& Lxx, const std::vector<Pointi>& Pts, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false);
//行驶方向1正向行驶-1逆向行驶
DriveDirType driveDirection(const TModelLine* lane);
@ -173,6 +176,7 @@ protected: //A2C6-20250310 大车A2挂车新增加的方法
void Calc_CheLunYaXian_Tail(int curRoadIndex, int curLaneIndex);
//形状线计算
void RTKJudge_SubItem_Tail();
private:
ISub3JudgeItem* m_commItem = nullptr;
ISub3JudgeItem* m_curItem = nullptr;

View File

@ -232,10 +232,13 @@ JUDGE_STAGE_IMPL(Sub2Judge03Cftc, Sub2CftcStage1)
{
const TGPSLines LS = {m_model->L34(),m_model->L45(),m_model->L56(),m_model->L36()};
const PointSets& body = m_car->carModel()->body(); //车身24点
static constexpr int history = 2;
static constexpr int history = 5;
if(pureCarTouchSomeLines(LS, body, history) ||
pureCarTouchPairLines(LS, {II(3), II(15)}) ||
pureCarTouchPairLines(LS, {II(11), II(23)}))
pureCarTouchPairLines(LS, {II(4), II(14)}) ||
pureCarTouchPairLines(LS, {II(11), II(23)}) ||
pureCarTouchPairLines(LS, {II(12), II(22)}) ||
pureCarTouchPairLines(LS, {II(1), II(13)}))
{
m_outLine = true;
//ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_ONCE(MARK_SUB2_CFTC_01)); //add enter

View File

@ -86,41 +86,43 @@ void Sub3Judge12Lkdt::dealJudgeItem()
}
}
double MaxAngleChange = 0;
for(int i = 1; i < 500; i++)
if(m_exam->Gps_Itemno1 == 3) //穿越3点才判断角度 20250409
{
const TChuanGan* hisi = m_car->historyChuanGan(i);
if(hisi == nullptr) break;
const TGpsInfo& gpsi = hisi->real.gps;
if(!gpsi.rtkEnabled) break;
if (hisi->tkCnt <= m_itemv.Enter_TK) break;
double a = gps.hxj - gpsi.hxj;
//处理越界问题
if(a > 300)
for(int i = 1; i < 500; i++)
{
a = a - 360;
}
else
{
if(a < -300)
const TChuanGan* hisi = m_car->historyChuanGan(i);
if(hisi == nullptr) break;
const TGpsInfo& gpsi = hisi->real.gps;
if(!gpsi.rtkEnabled) break;
if (hisi->tkCnt <= m_itemv.Enter_TK) break;
double a = gps.hxj - gpsi.hxj;
//处理越界问题
if(a > 300)
{
a = a + 360;
a = a - 360;
}
else
{
if(a < -300)
{
a = a + 360;
}
}
}
a = std::abs(a);
if(Tools::greater(a, MaxAngleChange))
{
MaxAngleChange = a;
}
a = std::abs(a);
if(Tools::greater(a, MaxAngleChange))
{
MaxAngleChange = a;
}
if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150
{
m_itemv.LuK_FXD_AngleOKFlag = true;
break;
if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150
{
m_itemv.LuK_FXD_AngleOKFlag = true;
break;
}
}
}

View File

@ -101,39 +101,42 @@ void Sub3Judge15Lkzz::dealJudgeItem()
}
double MaxAngleChange = 0;
for(int i = 1; i < 500; i++)
if(m_exam->Gps_Itemno1 == 3) //穿越3点才判断角度 20250409
{
const TChuanGan* hisi = m_car->historyChuanGan(i);
if(hisi == nullptr) break;
const TGpsInfo& gpsi = hisi->real.gps;
if(!gpsi.rtkEnabled) break;
if (hisi->tkCnt <= m_itemv.Enter_TK) break;
double a = gps.hxj - gpsi.hxj;
//处理越界问题
if(a > 300)
for(int i = 1; i < 500; i++)
{
a = a - 360;
}
else
{
if(a < -300)
const TChuanGan* hisi = m_car->historyChuanGan(i);
if(hisi == nullptr) break;
const TGpsInfo& gpsi = hisi->real.gps;
if(!gpsi.rtkEnabled) break;
if (hisi->tkCnt <= m_itemv.Enter_TK) break;
double a = gps.hxj - gpsi.hxj;
//处理越界问题
if(a > 300)
{
a = a + 360;
a = a - 360;
}
else
{
if(a < -300)
{
a = a + 360;
}
}
}
a = std::abs(a);
if(Tools::greater(a, MaxAngleChange))
{
MaxAngleChange = a;
}
a = std::abs(a);
if(Tools::greater(a, MaxAngleChange))
{
MaxAngleChange = a;
}
if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150
{
m_itemv.LuK_FXD_AngleOKFlag = true;
break;
if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150
{
m_itemv.LuK_FXD_AngleOKFlag = true;
break;
}
}
}

View File

@ -99,39 +99,42 @@ void Sub3Judge16Lkyz::dealJudgeItem()
}
double MaxAngleChange = 0;
for(int i = 1; i < 500; i++)
if(m_exam->Gps_Itemno1 == 3) //穿越3点才判断角度 20250409
{
const TChuanGan* hisi = m_car->historyChuanGan(i);
if(hisi == nullptr) break;
const TGpsInfo& gpsi = hisi->real.gps;
if(!gpsi.rtkEnabled) break;
if (hisi->tkCnt <= m_itemv.Enter_TK) break;
double a = gps.hxj - gpsi.hxj;
//处理越界问题
if(a > 300)
for(int i = 1; i < 500; i++)
{
a = a - 360;
}
else
{
if(a < -300)
const TChuanGan* hisi = m_car->historyChuanGan(i);
if(hisi == nullptr) break;
const TGpsInfo& gpsi = hisi->real.gps;
if(!gpsi.rtkEnabled) break;
if (hisi->tkCnt <= m_itemv.Enter_TK) break;
double a = gps.hxj - gpsi.hxj;
//处理越界问题
if(a > 300)
{
a = a + 360;
a = a - 360;
}
else
{
if(a < -300)
{
a = a + 360;
}
}
}
a = std::abs(a);
if(Tools::greater(a, MaxAngleChange))
{
MaxAngleChange = a;
}
a = std::abs(a);
if(Tools::greater(a, MaxAngleChange))
{
MaxAngleChange = a;
}
if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150
{
m_itemv.LuK_FXD_AngleOKFlag = true;
break;
if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150
{
m_itemv.LuK_FXD_AngleOKFlag = true;
break;
}
}
}

View File

@ -19,7 +19,7 @@
#define KIT_VERSION_MAJOR 1
#define KIT_VERSION_MINOR 0
#define KIT_VERSION_PATCH 2
#define KIT_VERSION_STAMP "2504091315b"
#define KIT_VERSION_STAMP "2504091505b"
#define KIT_VERSION_STR JUDGE_STR(KIT_VERSION_MAJOR.KIT_VERSION_MINOR.KIT_VERSION_PATCH)

View File

@ -1189,9 +1189,7 @@ struct UserInfo {
setTimeout(() => {
this.currentUser = item
this.currentUser.ksy2 = globalThis.kgxm
}, 200)
})
})
}.width(640 * this.ratio).margin({ left: 30 * this.ratio })