refactored the new floorplan

new helper methods/operator toe geo classes
This commit is contained in:
kazu
2016-05-24 17:01:56 +02:00
parent d0801606b7
commit 51cab55d37
10 changed files with 937 additions and 9 deletions

View File

@@ -14,8 +14,13 @@ public:
public:
/** empty ctor */
Line2() : p1(), p2() {;}
/** value ctor */
Line2(const Point2 p1, const Point2 p2) : p1(p1), p2(p2) {;}
/** value ctor */
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 {
@@ -24,6 +29,30 @@ public:
// }
/** get intersection between these two lines (unlimited length!) */
bool getLineIntersection(const Line2& other, Point2& result) const {
double bx = p2.x - p1.x;
double by = p2.y - p1.y;
double dx = other.p2.x - other.p1.x;
double dy = other.p2.y - other.p1.y;
double b_dot_d_perp = bx*dy - by*dx;
if(b_dot_d_perp == 0) {return false;}
double cx = other.p1.x - p1.x;
double cy = other.p1.y - p1.y;
double t = (cx*dy - cy*dx) / b_dot_d_perp;
result.x = p1.x + t * bx;
result.y = p1.y + t * by;
return true;
}
bool getSegmentIntersection(const Line2& other) const {
const float bx = p2.x - p1.x;
@@ -49,6 +78,34 @@ public:
}
bool getSegmentIntersection(const Line2& other, Point2& result) 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;}
result.x = p1.x + t * bx;
result.y = p1.y + t * by;
return true;
}
};
#endif // LINE2D_H