paysages3d/src/basics/SpaceSegment.cpp

57 lines
1.3 KiB
C++

#include "SpaceSegment.h"
SpaceSegment::SpaceSegment(const Vector3& start, const Vector3& end):
start(start), end(end)
{
}
bool SpaceSegment::intersectYInterval(double ymin, double ymax)
{
if (start.y > ymax)
{
if (end.y >= ymax)
{
return false;
}
else
{
Vector3 diff = end.sub(start);
start = start.add(diff.scale((ymax - start.y) / diff.y));
if (end.y < ymin)
{
end = end.add(diff.scale((ymin - end.y) / diff.y));
}
}
}
else if (start.y < ymin)
{
if (end.y <= ymin)
{
return false;
}
else
{
Vector3 diff = end.sub(start);
start = start.add(diff.scale((ymin - start.y) / diff.y));
if (end.y >= ymax)
{
end = end.add(diff.scale((ymax - end.y) / diff.y));
}
}
}
else /* start is inside layer */
{
Vector3 diff = end.sub(start);
if (end.y > ymax)
{
end = start.add(diff.scale((ymax - start.y) / diff.y));
}
else if (end.y < ymin)
{
end = start.add(diff.scale((ymin - start.y) / diff.y));
}
}
return true;
}