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
7
double
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
13
bool
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
18
bool
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
46
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) {
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
doIntersect
bool doIntersect(double p1x, double p1y, double q1x, double q1y, double p2x, double p2y, double q2x, double q2y)
Definition
util.cpp:18
lineIntersectsRectangle
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
orientation
double orientation(double px, double py, double qx, double qy, double rx, double ry)
Definition
util.cpp:7
onSegment
bool onSegment(double px, double py, double qx, double qy, double rx, double ry)
Definition
util.cpp:13
util.hpp
src
util.cpp
Generated by
1.10.0