| 180 | |
| 181 | |
| 182 | def _pt_arc(p: Point, a: Arc) -> Tuple[float, float, float, float]: |
| 183 | |
| 184 | x, y = p.x, p.y |
| 185 | |
| 186 | r = a.r |
| 187 | xc, yc = a.c.x, a.c.y |
| 188 | dx, dy = x - xc, y - yc |
| 189 | l = sqrt(dx ** 2 + dy ** 2) |
| 190 | |
| 191 | x1 = r ** 2 / l ** 2 * dx - r / l ** 2 * sqrt(l ** 2 - r ** 2) * dy + xc |
| 192 | y1 = r ** 2 / l ** 2 * dy + r / l ** 2 * sqrt(l ** 2 - r ** 2) * dx + yc |
| 193 | x2 = r ** 2 / l ** 2 * dx + r / l ** 2 * sqrt(l ** 2 - r ** 2) * dy + xc |
| 194 | y2 = r ** 2 / l ** 2 * dy - r / l ** 2 * sqrt(l ** 2 - r ** 2) * dx + yc |
| 195 | |
| 196 | return x1, y1, x2, y2 |
| 197 | |
| 198 | |
| 199 | def pt_arc(p: Point, a: Arc) -> Tuple[float, Segment]: |