55 lines
1023 B
C++
Executable File
55 lines
1023 B
C++
Executable File
#ifndef LINE2D_H
|
|
#define LINE2D_H
|
|
|
|
//#include <KLib/geo/Line.h>
|
|
#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 double bx = p2.x - p1.x;
|
|
const double by = p2.y - p1.y;
|
|
|
|
const double dx = other.p2.x - other.p1.x;
|
|
const double dy = other.p2.y - other.p1.y;
|
|
|
|
const double b_dot_d_perp = bx*dy - by*dx;
|
|
|
|
if(b_dot_d_perp == 0) {return false;}
|
|
|
|
const double cx = other.p1.x - p1.x;
|
|
const double cy = other.p1.y - p1.y;
|
|
|
|
const double t = (cx * dy - cy * dx) / b_dot_d_perp;
|
|
if(t < 0 || t > 1) {return false;}
|
|
|
|
const double u = (cx * by - cy * bx) / b_dot_d_perp;
|
|
if(u < 0 || u > 1) {return false;}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
#endif // LINE2D_H
|