diff --git a/include/common/qvec.hh b/include/common/qvec.hh index 19b7d6f1..7066b02c 100644 --- a/include/common/qvec.hh +++ b/include/common/qvec.hh @@ -545,7 +545,8 @@ template::value_ template::value_type, typename F = typename T::value_type> [[nodiscard]] inline F PolyArea(Iter begin, Iter end) { - Q_assert((end - begin) >= 3); + if ((end - begin) < 3) + return static_cast(0); float poly_area = 0; diff --git a/light/test_light.cc b/light/test_light.cc index cc3613e6..7c3c36b5 100644 --- a/light/test_light.cc +++ b/light/test_light.cc @@ -196,6 +196,11 @@ TEST(mathlib, PolygonArea) {0, 64, 0}, {64, 64, 0}, {64, 0, 0}}; EXPECT_EQ(64.0f * 64.0f, qv::PolyArea(poly.begin(), poly.end())); + + // 0, 1, or 2 vertices return 0 area + EXPECT_EQ(0.0f, qv::PolyArea(poly.begin(), poly.begin())); + EXPECT_EQ(0.0f, qv::PolyArea(poly.begin(), poly.begin() + 1)); + EXPECT_EQ(0.0f, qv::PolyArea(poly.begin(), poly.begin() + 2)); } TEST(mathlib, BarycentricFromPoint)