Is there any way for checking a point strictly inside a convex polygon in O(1)?
I know the logarithm technique.
# | User | Rating |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
# | User | Contrib. |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
4 | atcoder_official | 161 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
9 | nor | 153 |
Is there any way for checking a point strictly inside a convex polygon in O(1)?
I know the logarithm technique.
Name |
---|
Can you share O(log n) Solution ?
Let p1, ..., pn be points of polygon in clockwise order.
Now you're given point q and have to check whether it lies in polygon. At first check that it lies in angle formed by points p2, p1, pn. If that's false, then answer for sure is no. Otherwise let's notice that function "f(i) = is it true that triplet (p1, pi, q) is right-orientated" is monotone (i.e. it's always true at first, then always false). Do binary search on i checking the condition using orientated triangle area. After you've found the first i such that triplet (p1, pi, q) is left-orientated, check that q is in triangle p1, pi - 1, i. Done!
Thanks :)