src/geo2d/min_cover_c/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../make_c/ppp/lib.hpp" | ||
| 4 | #include "../rel/cp/lib.hpp" | ||
| 5 | |||
| 6 | namespace tifa_libs { | ||
| 7 | |||
| 8 | // min coverage circle of a set of points | ||
| 9 | //! shuffle `vp` first to avoid hack & improve accuracy | ||
| 10 | template <class FP> | ||
| 11 | 35 | CEXP circle<FP> min_cover_C(vec<point<FP>> CR vp) NE { | |
| 12 | 35 | circle<FP> ret{vp.front(), 0}; | |
| 13 | 35 | cu32 n = (u32)vp.size(); | |
| 14 |
2/2✓ Branch 0 taken 2921390 times.
✓ Branch 1 taken 35 times.
|
2921425 | flt_ (u32, i, 1, n) { |
| 15 |
2/2✓ Branch 2 taken 2920667 times.
✓ Branch 3 taken 723 times.
|
2921390 | if (relation_CP(ret, vp[i]) != RELCP::outside) continue; |
| 16 | 723 | ret = circle<FP>{vp[i], 0}; | |
| 17 |
2/2✓ Branch 0 taken 5738131 times.
✓ Branch 1 taken 723 times.
|
5738854 | flt_ (u32, j, 0, i) { |
| 18 |
2/2✓ Branch 2 taken 5731571 times.
✓ Branch 3 taken 6560 times.
|
5738131 | if (relation_CP(ret, vp[j]) != RELCP::outside) continue; |
| 19 | 6560 | ret = circle<FP>{mid_point(vp[i], vp[j]), dist_PP(vp[i], vp[j]) / 2}; | |
| 20 |
2/2✓ Branch 0 taken 7694390 times.
✓ Branch 1 taken 6560 times.
|
7700950 | flt_ (u32, k, 0, j) |
| 21 |
2/2✓ Branch 2 taken 13924 times.
✓ Branch 3 taken 7680466 times.
|
7694390 | if (relation_CP(ret, vp[k]) == RELCP::outside) ret = make_C_PPP(vp[i], vp[j], vp[k]); |
| 22 | } | ||
| 23 | } | ||
| 24 | 35 | return ret; | |
| 25 | } | ||
| 26 | |||
| 27 | } // namespace tifa_libs | ||
| 28 |