#ifndef LINE2D_H #define LINE2D_H //#include #include "Point2.h" class Line2 { public: Point2 p1; Point2 p2; public: Line2() : p1(), p2() {;} Line2(const float x1, const float y1, const float x2, const float y2) : p1(x1,y1), p2(x2,y2) {;} // bool getSegmentIntersection(const Line& other) const { // static K::Point p; // return K::Line::getSegmentIntersection(other, p); // } bool getSegmentIntersection(const Line2& other) const { const float bx = p2.x - p1.x; const float by = p2.y - p1.y; const float dx = other.p2.x - other.p1.x; const float dy = other.p2.y - other.p1.y; const float b_dot_d_perp = bx*dy - by*dx; if (b_dot_d_perp == 0) {return false;} const float cx = other.p1.x - p1.x; const float cy = other.p1.y - p1.y; const float t = (cx * dy - cy * dx) / b_dot_d_perp; if(t < 0 || t > 1) {return false;} const float u = (cx * by - cy * bx) / b_dot_d_perp; if(u < 0 || u > 1) {return false;} return true; } }; #endif // LINE2D_H