@@ -78,3 +78,35 @@ TEST_CASE("Normalized rect remap") {
7878 REQUIRE (float_eq (rect.size .width , 0.8 ));
7979 REQUIRE (float_eq (rect.size .height , 1.0 ));
8080}
81+
82+ TEST_CASE (" Normalized point outputs stay normalized outside unit range" ) {
83+ dai::Extrinsics extrinsics{{{1 , 0 , 0 }, {0 , 1 , 0 }, {0 , 0 , 1 }}, {0 , 0 , 0 }, dai::CameraBoardSocket::CAM_A};
84+ dai::ImgTransformation transformFrom (2000 , 1000 );
85+ dai::ImgTransformation transformTo (2000 , 1000 );
86+ transformFrom.setExtrinsics (extrinsics);
87+ transformTo.setExtrinsics (extrinsics);
88+ transformTo.addScale (2 , 2 );
89+ transformTo.addCrop (0 , 0 , 2000 , 1000 );
90+
91+ SECTION (" remapPointTo preserves normalized flag for values above 1" ) {
92+ dai::Point2f pt (0.75 , 0.75 , true );
93+ const auto remapped = transformFrom.remapPointTo (transformTo, pt);
94+
95+ REQUIRE (float_eq (remapped.x , 1.5 ));
96+ REQUIRE (float_eq (remapped.y , 1.5 ));
97+ REQUIRE (remapped.normalized );
98+ REQUIRE (remapped.hasNormalized );
99+ REQUIRE (remapped.isNormalized ());
100+ }
101+
102+ SECTION (" projectPointTo preserves normalized flag for values above 1" ) {
103+ dai::Point2f pt (0.75 , 0.75 , true );
104+ const auto projected = transformFrom.projectPointTo (transformTo, pt, 1000 .0f );
105+
106+ REQUIRE (float_eq (projected.x , 1.5 ));
107+ REQUIRE (float_eq (projected.y , 1.5 ));
108+ REQUIRE (projected.normalized );
109+ REQUIRE (projected.hasNormalized );
110+ REQUIRE (projected.isNormalized ());
111+ }
112+ }
0 commit comments