Skip to content

Commit df2485c

Browse files
bderodnfield
authored andcommitted
Add dot and cross product to Point (flutter#33)
1 parent f0a7b4e commit df2485c

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

impeller/geometry/geometry_unittests.cc

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,46 @@ TEST(GeometryTest, CanUsePointAssignmentOperators) {
454454
}
455455
}
456456

457+
TEST(GeometryTest, PointDotProduct) {
458+
{
459+
Point p(1, 0);
460+
Scalar s = p.Dot(Point(-1, 0));
461+
ASSERT_FLOAT_EQ(s, -1);
462+
}
463+
464+
{
465+
Point p(0, -1);
466+
Scalar s = p.Dot(Point(-1, 0));
467+
ASSERT_FLOAT_EQ(s, 0);
468+
}
469+
470+
{
471+
Point p(1, 2);
472+
Scalar s = p.Dot(Point(3, -4));
473+
ASSERT_FLOAT_EQ(s, -5);
474+
}
475+
}
476+
477+
TEST(GeometryTest, PointCrossProduct) {
478+
{
479+
Point p(1, 0);
480+
Scalar s = p.Cross(Point(-1, 0));
481+
ASSERT_FLOAT_EQ(s, 0);
482+
}
483+
484+
{
485+
Point p(0, -1);
486+
Scalar s = p.Cross(Point(-1, 0));
487+
ASSERT_FLOAT_EQ(s, -1);
488+
}
489+
490+
{
491+
Point p(1, 2);
492+
Scalar s = p.Cross(Point(3, -4));
493+
ASSERT_FLOAT_EQ(s, -10);
494+
}
495+
}
496+
457497
TEST(GeometryTest, CanConvertBetweenDegressAndRadians) {
458498
{
459499
auto deg = Degrees{90.0};

impeller/geometry/point.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,12 @@ struct TPoint {
175175
return {x / length, y / length};
176176
}
177177

178+
constexpr Scalar Cross(const TPoint& p) const {
179+
return (x * p.y) - (y * p.x);
180+
}
181+
182+
constexpr Scalar Dot(const TPoint& p) const { return (x * p.x) + (y * p.y); }
183+
178184
constexpr bool IsZero() const { return x == 0 && y == 0; }
179185
};
180186

0 commit comments

Comments
 (0)