src/geo2d/ins/ll/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../ds/l/lib.hpp" | ||
| 4 | |||
| 5 | namespace tifa_libs { | ||
| 6 | |||
| 7 | // judge if two lines are intersected or not | ||
| 8 | template <class FP> | ||
| 9 | 4927038 | CEXP bool is_ins_LL(line<FP> CR l1, line<FP> CR l2) NE { return !is_zero(cross(l2.l, l2.r, l1.l) - cross(l2.l, l2.r, l1.r)); } | |
| 10 | // intersection point of two lines | ||
| 11 | template <class FP> | ||
| 12 | 57268657 | CEXP point<FP> ins_LL(line<FP> CR l1, line<FP> CR l2) NE { | |
| 13 | 57268657 | const FP a1 = cross(l2.l, l2.r, l1.l), a2 = -cross(l2.l, l2.r, l1.r); | |
| 14 | 57268657 | return (l1.l * a2 + l1.r * a1) / (a1 + a2); | |
| 15 | } | ||
| 16 | template <class FP> | ||
| 17 | CEXP point<FP> ins_LL(line<FP> CR l, FP a, FP b, FP c) NE { | ||
| 18 | const FP a1 = abs(a * l.l.x + b * l.l.y + c), a2 = abs(a * l.r.x + b * l.r.y + c); | ||
| 19 | return (l.l * a2 + l.r * a1) / (a1 + a2); | ||
| 20 | } | ||
| 21 | |||
| 22 | } // namespace tifa_libs | ||
| 23 |