Skip to content

Commit df32186

Browse files
committed
More point and math
1 parent cb6a458 commit df32186

File tree

4 files changed

+108
-15
lines changed

4 files changed

+108
-15
lines changed

modules/yup_graphics/primitives/yup_Point.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -642,11 +642,9 @@ class YUP_API Point
642642
643643
@return The angle in radians between this point and the other point.
644644
*/
645-
[[nodiscard]] constexpr float angleTo (const Point& other) const noexcept
645+
[[nodiscard]] float angleTo (const Point& other) const noexcept
646646
{
647-
const auto magProduct = magnitude() * other.magnitude();
648-
649-
return magProduct == 0.0f ? 0.0f : std::acos (dotProduct (other) / magProduct);
647+
return std::atan2 (other.x - x, other.y - y);
650648
}
651649

652650
//==============================================================================
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
==============================================================================
3+
4+
This file is part of the YUP library.
5+
Copyright (c) 2025 - [email protected]
6+
7+
YUP is an open source library subject to open-source licensing.
8+
9+
The code included in this file is provided under the terms of the ISC license
10+
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
11+
to use, copy, modify, and/or distribute this software for any purpose with or
12+
without fee is hereby granted provided that the above copyright notice and
13+
this permission notice appear in all copies.
14+
15+
YUP IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
16+
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
17+
DISCLAIMED.
18+
19+
==============================================================================
20+
*/
21+
22+
#include <gtest/gtest.h>
23+
24+
#include <yup_core/yup_core.h>
25+
26+
using namespace yup;
27+
28+
namespace
29+
{
30+
} // namespace
31+
32+
TEST (MathFunctionsTests, XYZ)
33+
{
34+
}

tests/yup_graphics/yup_Point.cpp

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ TEST (PointTests, GetSet_Coordinates)
6262
p.setY (4.0f);
6363
EXPECT_FLOAT_EQ (p.getX(), 3.0f);
6464
EXPECT_FLOAT_EQ (p.getY(), 4.0f);
65+
66+
auto p2 = p.withXY (5.0f, 6.0f);
67+
EXPECT_FLOAT_EQ (p2.getX(), 5.0f);
68+
EXPECT_FLOAT_EQ (p2.getY(), 6.0f);
6569
}
6670

6771
TEST (PointTests, With_Coordinates)
@@ -179,6 +183,14 @@ TEST (PointTests, Rotation)
179183
}
180184
}
181185

186+
TEST (PointTests, AngleTo)
187+
{
188+
Point<float> p1 (0.0f, 0.0f);
189+
Point<float> p2 (1.0f, 1.0f);
190+
191+
EXPECT_FLOAT_EQ (p1.angleTo (p2), yup::degreesToRadians (45.0f));
192+
}
193+
182194
TEST (PointTests, Midpoint)
183195
{
184196
Point<float> p1 (0.0f, 0.0f);
@@ -234,6 +246,20 @@ TEST (PointTests, Reflection)
234246
Point<float> pO = p.reflectedOverOrigin();
235247
EXPECT_FLOAT_EQ (pO.getX(), -1.0f);
236248
EXPECT_FLOAT_EQ (pO.getY(), -2.0f);
249+
250+
Point<float> p0 (1.0f, 2.0f);
251+
252+
p0.reflectOverXAxis();
253+
EXPECT_FLOAT_EQ (p0.getX(), 1.0f);
254+
EXPECT_FLOAT_EQ (p0.getY(), -2.0f);
255+
256+
p0.reflectOverYAxis();
257+
EXPECT_FLOAT_EQ (p0.getX(), -1.0f);
258+
EXPECT_FLOAT_EQ (p0.getY(), -2.0f);
259+
260+
p0.reflectOverOrigin();
261+
EXPECT_FLOAT_EQ (p0.getX(), 1.0f);
262+
EXPECT_FLOAT_EQ (p0.getY(), 2.0f);
237263
}
238264

239265
TEST (PointTests, MinMax_Abs)
@@ -263,18 +289,42 @@ TEST (PointTests, Arithmetic_Operators)
263289
Point<float> sum = p1 + p2;
264290
EXPECT_FLOAT_EQ (sum.getX(), 4.0f);
265291
EXPECT_FLOAT_EQ (sum.getY(), 6.0f);
292+
sum = sum + 1.0f;
293+
EXPECT_FLOAT_EQ (sum.getX(), 5.0f);
294+
EXPECT_FLOAT_EQ (sum.getY(), 7.0f);
295+
sum += 1.0f;
296+
EXPECT_FLOAT_EQ (sum.getX(), 6.0f);
297+
EXPECT_FLOAT_EQ (sum.getY(), 8.0f);
266298

267299
Point<float> diff = p2 - p1;
268300
EXPECT_FLOAT_EQ (diff.getX(), 2.0f);
269301
EXPECT_FLOAT_EQ (diff.getY(), 2.0f);
270-
271-
Point<float> scaled = p1 * 2.0f;
272-
EXPECT_FLOAT_EQ (scaled.getX(), 2.0f);
273-
EXPECT_FLOAT_EQ (scaled.getY(), 4.0f);
274-
275-
Point<float> divided = scaled / 2.0f;
276-
EXPECT_FLOAT_EQ (divided.getX(), 1.0f);
277-
EXPECT_FLOAT_EQ (divided.getY(), 2.0f);
302+
diff = diff - 1.0f;
303+
EXPECT_FLOAT_EQ (diff.getX(), 1.0f);
304+
EXPECT_FLOAT_EQ (diff.getY(), 1.0f);
305+
diff -= 1.0f;
306+
EXPECT_FLOAT_EQ (diff.getX(), 0.0f);
307+
EXPECT_FLOAT_EQ (diff.getY(), 0.0f);
308+
309+
Point<float> mul = p2 * p1;
310+
EXPECT_FLOAT_EQ (mul.getX(), 3.0f);
311+
EXPECT_FLOAT_EQ (mul.getY(), 8.0f);
312+
mul = mul * 2.0f;
313+
EXPECT_FLOAT_EQ (mul.getX(), 6.0f);
314+
EXPECT_FLOAT_EQ (mul.getY(), 16.0f);
315+
mul *= 0.5f;
316+
EXPECT_FLOAT_EQ (mul.getX(), 3.0f);
317+
EXPECT_FLOAT_EQ (mul.getY(), 8.0f);
318+
319+
Point<float> div = p2 / p1;
320+
EXPECT_FLOAT_EQ (div.getX(), 3.0f);
321+
EXPECT_FLOAT_EQ (div.getY(), 2.0f);
322+
div = div / 2.0f;
323+
EXPECT_FLOAT_EQ (div.getX(), 1.5f);
324+
EXPECT_FLOAT_EQ (div.getY(), 1.0f);
325+
div /= 0.5f;
326+
EXPECT_FLOAT_EQ (div.getX(), 3.0f);
327+
EXPECT_FLOAT_EQ (div.getY(), 2.0f);
278328
}
279329

280330
TEST (PointTests, Equality_Operators)

tests/yup_graphics/yup_Rectangle.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ TEST (RectangleTests, Default_Constructor)
4242

4343
TEST (RectangleTests, Parameterized_Constructors)
4444
{
45+
// Constructor with width, height
46+
Rectangle<float> r0 (3.0f, 4.0f);
47+
EXPECT_FLOAT_EQ (r0.getX(), 0.0f);
48+
EXPECT_FLOAT_EQ (r0.getY(), 0.0f);
49+
EXPECT_FLOAT_EQ (r0.getWidth(), 3.0f);
50+
EXPECT_FLOAT_EQ (r0.getHeight(), 4.0f);
51+
4552
// Constructor with x, y, width, height
4653
Rectangle<float> r1 (1.0f, 2.0f, 3.0f, 4.0f);
4754
EXPECT_FLOAT_EQ (r1.getX(), 1.0f);
@@ -147,10 +154,14 @@ TEST (RectangleTests, Position_And_Size)
147154
EXPECT_FLOAT_EQ (r4.getWidth(), 9.0f);
148155
EXPECT_FLOAT_EQ (r4.getHeight(), 10.0f);
149156

157+
Rectangle<float> r5 = r.withSize (9.0f, 10.0f);
158+
EXPECT_FLOAT_EQ (r5.getWidth(), 9.0f);
159+
EXPECT_FLOAT_EQ (r5.getHeight(), 10.0f);
160+
150161
// Test withZeroSize
151-
Rectangle<float> r5 = r.withZeroSize();
152-
EXPECT_FLOAT_EQ (r5.getWidth(), 0.0f);
153-
EXPECT_FLOAT_EQ (r5.getHeight(), 0.0f);
162+
Rectangle<float> r6 = r.withZeroSize();
163+
EXPECT_FLOAT_EQ (r6.getWidth(), 0.0f);
164+
EXPECT_FLOAT_EQ (r6.getHeight(), 0.0f);
154165
}
155166

156167
TEST (RectangleTests, Corners)

0 commit comments

Comments
 (0)