Fix geom::intersection(segment,box) for axis-aligned segments

This commit is contained in:
Nikita Lisitsa 2022-06-19 22:25:56 +03:00
parent 0bddeaf865
commit 0cb197a6c4

View file

@ -138,6 +138,8 @@ namespace psemek::geom
auto t = interval<T>{T(0), T(1)}; auto t = interval<T>{T(0), T(1)};
for (std::size_t i = 0; i < N; ++i) for (std::size_t i = 0; i < N; ++i)
{
if (s[1][i] != s[0][i])
{ {
T tmin = (b[i].min - s[0][i]) / (s[1][i] - s[0][i]); T tmin = (b[i].min - s[0][i]) / (s[1][i] - s[0][i]);
T tmax = (b[i].max - s[0][i]) / (s[1][i] - s[0][i]); T tmax = (b[i].max - s[0][i]) / (s[1][i] - s[0][i]);
@ -146,6 +148,12 @@ namespace psemek::geom
t &= interval<T>{tmin, tmax}; t &= interval<T>{tmin, tmax};
} }
else
{
if (!contains(b[i], s[0][i]))
return interval<T>{};
}
}
return t; return t;
} }