@@ -1152,6 +1152,74 @@ TEST_F(MjGjkTest, BoxBoxMultiCCD12) {
11521152 mj_deleteModel (model);
11531153}
11541154
1155+ TEST_F (MjGjkTest, BoxBoxMultiCCD13) {
1156+ static constexpr char xml[] = R"(
1157+ <mujoco>
1158+ <worldbody>
1159+ <geom name="geom1" type="box" pos="0 0 0" size="0.02 0.02 0.02"/>
1160+ <geom name="geom2" type="box" pos="0 0 0" size="0.02 0.02 0.02"/>
1161+ </worldbody>
1162+ </mujoco>)" ;
1163+
1164+ std::array<char , 1000 > error;
1165+ mjModel* model = LoadModelFromString (xml, error.data (), error.size ());
1166+ ASSERT_THAT (model, NotNull ()) << " Failed to load model: " << error.data ();
1167+
1168+ mjData* data = mj_makeData (model);
1169+ mj_forward (model, data);
1170+
1171+ mjtNum* xpos = data->geom_xpos ;
1172+ mjtNum* xmat = data->geom_xmat ;
1173+
1174+ xmat[0 ] = 1.0000000000000000000000000000000000000000 ;
1175+ xmat[1 ] = -0.0000000000000000000000000000001366192847 ;
1176+ xmat[2 ] = -0.0000000000000002451235402041944571528177 ;
1177+ xmat[3 ] = 0.0000000000000000000000000000001366707863 ;
1178+ xmat[4 ] = 1.0000000000000000000000000000000000000000 ;
1179+ xmat[5 ] = 0.0000000000000000002101047324941978855126 ;
1180+ xmat[6 ] = 0.0000000000000002451235402041944571528177 ;
1181+ xmat[7 ] = -0.0000000000000000002101047324941978855126 ;
1182+ xmat[8 ] = 1.0000000000000000000000000000000000000000 ;
1183+
1184+ xpos[0 ] = -0.1000000000000000055511151231257827021182 ;
1185+ xpos[1 ] = -0.2000000000000000111022302462515654042363 ;
1186+ xpos[2 ] = -0.0809921810760001470441693527391180396080 ;
1187+
1188+ xpos = data->geom_xpos + 3 ;
1189+ xmat = data->geom_xmat + 9 ;
1190+
1191+ xmat[0 ] = 1.0000000000000000000000000000000000000000 ;
1192+ xmat[1 ] = -0.0000000000000000000000000000000740327228 ;
1193+ xmat[2 ] = -0.0000000000000002557259745463766308177658 ;
1194+ xmat[3 ] = 0.0000000000000000000000000000000775428823 ;
1195+ xmat[4 ] = 1.0000000000000000000000000000000000000000 ;
1196+ xmat[5 ] = 0.0000000000000000137262533997081760161613 ;
1197+ xmat[6 ] = 0.0000000000000002557259745463766308177658 ;
1198+ xmat[7 ] = -0.0000000000000000137262533997081760161613 ;
1199+ xmat[8 ] = 1.0000000000000000000000000000000000000000 ;
1200+
1201+ xpos[0 ] = -0.1000000000000000055511151231257827021182 ;
1202+ xpos[1 ] = -0.2000000000000000111022302462515654042363 ;
1203+ xpos[2 ] = -0.0418396695286432432348000531874276930466 ;
1204+
1205+ int g1 = mj_name2id (model, mjOBJ_GEOM, " geom1" );
1206+ int g2 = mj_name2id (model, mjOBJ_GEOM, " geom2" );
1207+
1208+ mjCCDStatus status;
1209+ std::vector<mjtNum> dir, pos;
1210+ mjtNum dist;
1211+ int ncons = Penetration (status, dist, dir, pos, model, data, g1, g2, 0 , 8 );
1212+
1213+ EXPECT_EQ (ncons, 4 );
1214+
1215+ EXPECT_NEAR (dir[0 ], 0 , kTolerance );
1216+ EXPECT_NEAR (dir[1 ], 0 , kTolerance );
1217+ EXPECT_NEAR (dir[2 ], 1 , kTolerance );
1218+
1219+ mj_deleteData (data);
1220+ mj_deleteModel (model);
1221+ }
1222+
11551223TEST_F (MjGjkTest, SmallBoxMesh) {
11561224 static constexpr char xml[] = R"(
11571225 <mujoco>
0 commit comments