mathlib: add PointsAlongLine
This commit is contained in:
parent
b31ae5d243
commit
8067e0fa45
|
|
@ -540,3 +540,20 @@ std::vector<glm::vec3> GLM_ShrinkPoly(const std::vector<glm::vec3> &poly, const
|
||||||
|
|
||||||
return clipped;
|
return clipped;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<glm::vec3> PointsAlongLine(const glm::vec3 &start, const glm::vec3 &end, const float step)
|
||||||
|
{
|
||||||
|
const vec3 linesegment = end - start;
|
||||||
|
const float len = length(linesegment);
|
||||||
|
if (len == 0)
|
||||||
|
return {};
|
||||||
|
|
||||||
|
vector<vec3> result;
|
||||||
|
const vec3 dir = linesegment / len;
|
||||||
|
const int stepCount = static_cast<int>(len / step);
|
||||||
|
for (int i=0; i<=stepCount; i++) {
|
||||||
|
vec3 pt = start + (dir * (step * i));
|
||||||
|
result.push_back(pt);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -397,4 +397,6 @@ V bilinearInterpolate(const V &f00, const V &f10, const V &f01, const V &f11, co
|
||||||
return fxy;
|
return fxy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<glm::vec3> PointsAlongLine(const glm::vec3 &start, const glm::vec3 &end, const float step);
|
||||||
|
|
||||||
#endif /* __COMMON_MATHLIB_H__ */
|
#endif /* __COMMON_MATHLIB_H__ */
|
||||||
|
|
|
||||||
|
|
@ -589,3 +589,10 @@ TEST(mathlib, bilinearWeightsAndCoords2) {
|
||||||
EXPECT_EQ(vec2(2, 1.5), sum);
|
EXPECT_EQ(vec2(2, 1.5), sum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(mathlib, pointsAlongLine) {
|
||||||
|
const auto res = PointsAlongLine(vec3(1,0,0), vec3(3.5, 0, 0), 1.5f);
|
||||||
|
|
||||||
|
ASSERT_EQ(2, res.size());
|
||||||
|
ASSERT_TRUE(pointsEqualEpsilon(vec3(1,0,0), res[0], POINT_EQUAL_EPSILON));
|
||||||
|
ASSERT_TRUE(pointsEqualEpsilon(vec3(2.5,0,0), res[1], POINT_EQUAL_EPSILON));
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue