Roomba Controller Dashboard 1
A GUI and TCP client application that is used to control a Roomba for Computer Engineering 2880 @ Iowa State
Loading...
Searching...
No Matches
util.cpp
Go to the documentation of this file.
1
5#include "util.hpp"
6
7double orientation(double px, double py, double qx, double qy, double rx, double ry) {
8 double val = (qy - py) * (rx - qx) - (qx - px) * (ry - qy);
9 if (fabs(val) < 0.1) return 0; // collinear
10 return (val > 0) ? 1 : 2; // clockwise or counterclockwise
11}
12
13bool onSegment(double px, double py, double qx, double qy, double rx, double ry) {
14 return qx <= (px > rx ? px : rx) && qx >= (px < rx ? px : rx) &&
15 qy <= (py > ry ? py : ry) && qy >= (py < ry ? py : ry);
16}
17
18bool doIntersect(double p1x, double p1y, double q1x, double q1y, double p2x, double p2y, double q2x, double q2y) {
19 double o1 = orientation(p1x, p1y, q1x, q1y, p2x, p2y);
20 double o2 = orientation(p1x, p1y, q1x, q1y, q2x, q2y);
21 double o3 = orientation(p2x, p2y, q2x, q2y, p1x, p1y);
22 double o4 = orientation(p2x, p2y, q2x, q2y, q1x, q1y);
23
24 // standard case
25 if (o1 != o2 && o3 != o4) return true;
26
27 // Edge cases
28 // p1, q1, p2 are collinear and p2 lies on segment p1q1
29 if (o1 == 0 && onSegment(p1x, p1y, p2x, p2y, q1x, q1y)) return true;
30
31 // p1, q1, q2 are collinear and q2 lies on segment p1q1
32 if (o2 == 0 && onSegment(p1x, p1y, q2x, q2y, q1x, q1y)) return true;
33
34 // p2, q2, p1 are collinear and p1 lies on segment p2q2
35 if (o3 == 0 && onSegment(p2x, p2y, p1x, p1y, q2x, q2y)) return true;
36
37 // p2, q2, q1 are collinear and q1 lies on segment p2q2
38 if (o4 == 0 && onSegment(p2x, p2y, q1x, q1y, q2x, q2y)) return true;
39
40 return false; // No doubleersection
41}
42
43
44
45
46bool lineIntersectsRectangle(double cx1, double cy1, double cx2, double cy2, double rx1, double ry1, double rx2, double ry2, double rx3, double ry3, double rx4, double ry4) {
47 // Check if the line intersects any of the rectangle's edges
48 return doIntersect(cx1, cy1, cx2, cy2, rx1, ry1, rx2, ry2) || doIntersect(cx1, cy1, cx2, cy2, rx2, ry2, rx3, ry3) || doIntersect(cx1, cy1, cx2, cy2, rx3, ry3, rx4, ry4) || doIntersect(cx1, cy1, cx2, cy2, rx4, ry4, rx1, ry1);
49}
50
bool doIntersect(double p1x, double p1y, double q1x, double q1y, double p2x, double p2y, double q2x, double q2y)
Definition util.cpp:18
bool lineIntersectsRectangle(double cx1, double cy1, double cx2, double cy2, double rx1, double ry1, double rx2, double ry2, double rx3, double ry3, double rx4, double ry4)
Definition util.cpp:46
double orientation(double px, double py, double qx, double qy, double rx, double ry)
Definition util.cpp:7
bool onSegment(double px, double py, double qx, double qy, double rx, double ry)
Definition util.cpp:13