40 """Cartesian distance from point to line segment
42 Edited to support arguments as series, from:
43 https://stackoverflow.com/a/54442561/11208892
46 - p: np.array of single point, shape (2,) or 2D array, shape (x, 2)
47 - a: np.array of shape (x, 2)
48 - b: np.array of shape (x, 2)
52 d = np.divide(d_ba, (np.hypot(d_ba[:, 0], d_ba[:, 1])
57 s = np.multiply(a - p, d).sum(axis=1)
58 t = np.multiply(p - b, d).sum(axis=1)
61 h = np.maximum.reduce([s, t, np.zeros(len(s))])
66 c = d_pa[:, 0] * d[:, 1] - d_pa[:, 1] * d[:, 0]
87 for i
in range(-offsetLane,len(toBeckCheckedConesLeft)-1):
88 p1 = toBeckCheckedConesLeft[i-2][0]
89 p2 = toBeckCheckedConesLeft[i-1][0]
90 p3 = toBeckCheckedConesLeft[i][0]
92 tangential = (1/np.linalg.norm(tangential)) * tangential
93 projectionDistance = 4
94 normal = np.array([-tangential[1], tangential[0], 0])
95 normal = projectionDistance * normal
96 closestInd = self.
getClosestInd(p2 + normal, toBeckCheckedConesRight)
97 indicesToCheck = np.linspace(closestInd-5, closestInd+5, num = 11, dtype=int)
100 for j
in indicesToCheck:
101 a.append(toBeckCheckedConesRight[j % len(toBeckCheckedConesRight)][0][0:2])
102 b.append(toBeckCheckedConesRight[(j+1) % len(toBeckCheckedConesRight)][0][0:2])
103 minDistance = min(minDistance, min(self.
lineseg_dists(p2[0:2], np.array(a), np.array(b))))
144 len_side_1 =
round( np.linalg.norm(point1-point2), 2)
145 len_side_2 =
round( np.linalg.norm(point2-point3), 2)
146 len_side_3 =
round( np.linalg.norm(point1-point3), 2)
149 sp = (len_side_1 + len_side_2 + len_side_3) / 2
152 area = np.sqrt(max(sp * (sp - len_side_1) * (sp - len_side_2) * (sp - len_side_3),0.00001))
155 curvature = (4 * area) / max(len_side_1 * len_side_2 * len_side_3,0.0000001)
166 for i
in range(-offsetLane,len(toBeckCheckedConesLeft)-2):
167 p1 = toBeckCheckedConesLeft[i-2][0]
168 p2 = toBeckCheckedConesLeft[i-1][0]
169 p3 = toBeckCheckedConesLeft[i][0]
171 tangential = (1/np.linalg.norm(tangential)) * tangential
172 projectionDistance = 4
173 normal = np.array([-tangential[1], tangential[0], 0])
174 normal = projectionDistance * normal
176 p4 = toBeckCheckedConesLeft[(closestInd-1) % len(toBeckCheckedConesLeft)][0]
177 p5 = toBeckCheckedConesLeft[(closestInd) % len(toBeckCheckedConesLeft)][0]
178 p6 = toBeckCheckedConesLeft[(closestInd+1) % len(toBeckCheckedConesLeft)][0]
179 minRadius = min(minRadius, max(1/self.
getCurvature(p1[0:2],p2[0:2],p3[0:2]), 1/self.
getCurvature(p4[0:2],p5[0:2],p6[0:2])))