src/geo2d/make_c/rll/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../ds/c/lib.hpp" | ||
| 4 | #include "../../ins/ll/lib.hpp" | ||
| 5 | |||
| 6 | namespace tifa_libs { | ||
| 7 | |||
| 8 | // make circle by radius and 2 tagante lines | ||
| 9 | template <class FP> | ||
| 10 | 101 | CEXP auto make_C_rLL(FP r, line<FP> CR l1, line<FP> CR l2) NE { | |
| 11 | 101 | std::optional<pt4<circle<FP>>> ret; | |
| 12 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 101 times.
|
101 | if (is_parallel(l1, l2)) return ret; |
| 13 | 101 | point<FP> dir1 = l1.direction(), dir2 = l2.direction(); | |
| 14 | 101 | dir1 *= r / dir1.norm(), dir2 *= r / dir2.norm(); | |
| 15 | 101 | const point<FP> dirl1 = rot90(dir1), dirr1 = rot270(dir1), | |
| 16 | 101 | dirl2 = rot90(dir2), dirr2 = rot270(dir2); | |
| 17 | 101 | const line<FP> u1 = {l1.l + dirl1, l1.r + dirl1}, u2 = {l1.l + dirr1, l1.r + dirr1}, | |
| 18 | 101 | v1 = {l2.l + dirl2, l2.r + dirl2}, v2 = {l2.l + dirr2, l2.r + dirr2}; | |
| 19 | 101 | ret.emplace(circle{ins_LL(u1, v1), r}, circle{ins_LL(u1, v2), r}, circle{ins_LL(u2, v1), r}, circle{ins_LL(u2, v2), r}); | |
| 20 | 101 | return ret; | |
| 21 | } | ||
| 22 | |||
| 23 | } // namespace tifa_libs | ||
| 24 |