66 lines
1.2 KiB
C++
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;
|
|
}
|