Is there any way for checking a point strictly inside a convex polygon in O(1)?
I know the logarithm technique.
№ | Пользователь | Рейтинг |
---|---|---|
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 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
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.
Название |
---|
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 :)