@@ -143,3 +143,74 @@ TEST_F(TypesTests, test_twist) {
143143 EXPECT_NEAR (diff.q , 0.3 , 1e-12 );
144144 EXPECT_NEAR (diff.r , 1.4 , 1e-12 );
145145}
146+
147+ TEST_F (TypesTests, test_line_segment_2d) {
148+ vortex::utils::types::LineSegment2D line_segment;
149+ line_segment.p0 = {1.0 , 0.2 };
150+ line_segment.p1 = {0.4 , 1.2 };
151+
152+ vortex::utils::types::Line2D line2d = line_segment.polar_parametrization ();
153+
154+ double expected_rho = 0.96039207679805 ; // sqrt(13)
155+ double expected_theta = 0.540419500270584 ; // atan2(4, 3)
156+
157+ EXPECT_NEAR (line2d.rho , expected_rho, 1e-12 );
158+ EXPECT_NEAR (line2d.theta , expected_theta, 1e-12 );
159+ }
160+
161+ TEST_F (TypesTests, test_line_segment_vertical) {
162+ vortex::utils::types::LineSegment2D line_segment;
163+ line_segment.p0 = {1.0 , 0.0 };
164+ line_segment.p1 = {1.0 , 1.2 };
165+
166+ vortex::utils::types::Line2D line2d = line_segment.polar_parametrization ();
167+
168+ double expected_rho = 1.0 ;
169+ double expected_theta = 0.0 ;
170+
171+ EXPECT_NEAR (line2d.rho , expected_rho, 1e-12 );
172+ EXPECT_NEAR (line2d.theta , expected_theta, 1e-12 );
173+ }
174+
175+ TEST_F (TypesTests, test_line_segment_horizontal) {
176+ vortex::utils::types::LineSegment2D line_segment;
177+ line_segment.p0 = {1.2 , 1.2 };
178+ line_segment.p1 = {0 , 1.2 };
179+
180+ vortex::utils::types::Line2D line2d = line_segment.polar_parametrization ();
181+
182+ double expected_rho = 1.2 ;
183+ double expected_theta = M_PI / 2.0 ;
184+
185+ EXPECT_NEAR (line2d.rho , expected_rho, 1e-12 );
186+ EXPECT_NEAR (line2d.theta , expected_theta, 1e-12 );
187+ }
188+
189+ TEST_F (TypesTests, test_line_segment_zero_length) {
190+ vortex::utils::types::LineSegment2D line_segment;
191+ line_segment.p0 = {0.0 , 0.0 };
192+ line_segment.p1 = {0.0 , 0.0 };
193+
194+ ASSERT_THROW (line_segment.polar_parametrization (), std::runtime_error);
195+ }
196+
197+ TEST_F (TypesTests, test_line_segment_wrap_theta) {
198+ vortex::utils::types::LineSegment2D line_segment1;
199+ double epsilon = 0.01 ;
200+ line_segment1.p0 = {0.4 , -0.2 };
201+ line_segment1.p1 = {0.4 - epsilon, 0.4 };
202+
203+ vortex::utils::types::Line2D line2d1 =
204+ line_segment1.polar_parametrization ();
205+
206+ vortex::utils::types::LineSegment2D line_segment2;
207+ line_segment2.p0 = {0.4 , -0.2 };
208+ line_segment2.p1 = {0.4 + epsilon, 0.4 };
209+
210+ vortex::utils::types::Line2D line2d2 =
211+ line_segment2.polar_parametrization ();
212+
213+ EXPECT_NEAR (line2d1.rho , line2d2.rho , 0.1 );
214+
215+ EXPECT_NEAR (line2d1.theta + 2 * M_PI, line2d2.theta , 0.1 );
216+ }
0 commit comments