This repository has been archived on 2020-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Indoor/geo/Line2.h
FrankE e6329e1db4 dijkstra is now bleching fast
deleting from the grid is now bleaching fast
added new helper methods
many new test-cases
many new methods for geo classes and others
added a bunch of new grid-walkers
2016-01-26 18:13:30 +01:00

55 lines
1015 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 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