Fix geom::intersection(segment,box) for axis-aligned segments
This commit is contained in:
parent
0bddeaf865
commit
0cb197a6c4
1 changed files with 12 additions and 4 deletions
|
|
@ -139,12 +139,20 @@ namespace psemek::geom
|
||||||
|
|
||||||
for (std::size_t i = 0; i < N; ++i)
|
for (std::size_t i = 0; i < N; ++i)
|
||||||
{
|
{
|
||||||
T tmin = (b[i].min - s[0][i]) / (s[1][i] - s[0][i]);
|
if (s[1][i] != s[0][i])
|
||||||
T tmax = (b[i].max - 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]);
|
||||||
|
|
||||||
if (tmin > tmax) std::swap(tmin, tmax);
|
if (tmin > tmax) std::swap(tmin, tmax);
|
||||||
|
|
||||||
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;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue