spacebox/src/Segment.cpp

66 lines
1.2 KiB
C++

#include "Segment.hpp"
Segment::Segment() : Segment({0, 0}, {0, 0}) {};
Segment::Segment(const glm::vec2& location) : Segment(location, location) {};
Segment::Segment(const glm::vec2& start, const glm::vec2& end) : start(start), end(end) {};
glm::vec2 Segment::get_start() const
{
return start;
}
void Segment::set_start(const glm::vec2& s)
{
start = s;
}
glm::vec2 Segment::get_end() const
{
return end;
}
void Segment::set_end(const glm::vec2& e)
{
end = e;
}
bool Segment::intersect(const Segment& segment)
{
return sfw::segments_intersect(*this, segment);
}
bool Segment::intersect(const Segment& segment, glm::vec2& intersection)
{
return sfw::segments_intersect(*this, segment, intersection);
}
float Segment::get_dx()
{
return end.x - start.x;
}
float Segment::get_length()
{
return glm::distance(start, end);
}
void Segment::move(const glm::vec2& delta)
{
start += delta;
end += delta;
}
glm::vec2 Segment::get_center()
{
return sfw::get_segments(*this, 2)[0].end;
}
std::ostream& operator<<(std::ostream& out, const Segment& segment)
{
out << "{(" << segment.start.x << ", " << segment.start.y << "), (" <<
segment.end.x << ", " << segment.end.y << ")}";
return out;
}