У обчислювальній геометрії видимим полігоном або областю видимості точки р на площині серед перешкод є, можливо, необмежена многокутна область всіх точок площини, видима з p. Полігон видимості також може бути визначений для видимості з сегмента або многокутника. Полігони видимості використовуються у робототехніці, відеоіграх і для визначення місця розташування об'єктів, таких як найкраще розміщення охоронців в художній галереї.
Якщо видимість многокутника обмежена, то це зіркоподібний многокутник. Полігон видимості обмежений, якщо всі промені, які виходять з точки, в кінцевому підсумку закінчуються деякою перешкодою. Таке трапляється, наприклад, якщо перешкоди — це ребра простого многокутника, а p знаходиться всередині многокутника. В останньому випадку многокутник видимості може бути знайдений за лінійний час.
Визначення
Формально ми можемо визначити задачу пошуку плаского многокутника видимості наступним чином. Нехай — множина перешкод (відрізків або многокутників) в . Нехай — точка в , яка не міститься всередині перешкоди. Для точки многокутником видимості буде множина точок в , таких, що для будь-якої точки з , відрізок не перетинає жодну перешкоду в .
Додатки
Полігони видимості корисні в робототехніці. Наприклад, коли робот в процесі [en] використовує такі датчики, як лідар для виявлення відстані до перешкоди, то, по суті, він будує многокутник видимості.
Многокутники видимості також використовуються у відеоіграх, існує багато онлайн-підручників, які пояснюють прості алгоритми їх реалізації.
Алгоритми пошуку многокутників видимості точки
Численні алгоритми були запропоновані для обчислення полігонів видимості точки. Для різних варіантів задачі (наприклад, для різних типів перешкод) алгоритми відрізняються за часовою складністю.
Наївні алгоритми
Наївні алгоритми легко зрозуміти і реалізувати, але вони не [en], бо зазвичай є набагато повільнішіми за інші алгоритми.
Уніфікований алгоритм «фізичного» перетворення променів
У реальному житті точка, що світиться, освітлює видиму їй область, оскільки випромінює світло в усіх напрямках. Це можна змоделювати, стріляючи променями в багатьох напрямках. Припустимо, що є точка і множина перешкод. Тоді алгоритм буде виражений наступним псевдокодом:
алгоритм простий_поганий_алгоритм(, ) := для : //вистрілити промінь з кутом := для кожної перешкоди у : := min(, відстань від до перешкоди в цьому напрямку) додати вершину у повернути
Тепер, якби можна було спробувати всю неперервну множину кутів, результат був би правильним. На жаль, неможливо дійсно спробувати кожен напрямок через обмеження на обчислювальну потужність. Наближення можна створити, кинувши багато, скажімо, 50 променів, розташованих рівномірно один від одного. Однак це не точне рішення, бо малі перешкоди можуть бути пропущені між двома сусідніми променями. Крім того, він дуже повільний, тому що для отримання приблизно такого ж рішення може знадобитися багато променів, і многокутник вихідної видимості може мати в собі набагато більше вершин, ніж потрібно.
Алгоритм перетворення для кожної вершини
Описаний раніше алгоритм можна значно покращити як за швидкістю, так і за точністю, зробивши спостереження, що достатньо стріляти променями лише у вершини кожної перешкоди. Це пов'язано з тим, що будь-які вигини або кути уздовж межі многокутника видимості обумовлені деякою вершиною на перешкоді.
алгоритм простий_покращенний_алгоритм(, ) := для кожної перешкоди у : для кожної вершини з : //вистрілити промінь з у := відстань від до := кут відносно для кожної перешкоди у : := min(, відстань від до ) додати вершину у повернути
Часова складність цього алгоритму — . Це пов'язано з тим, що алгоритм відстрілює промінь для кожної з вершин, і щоб перевірити, де закінчується промінь, він повинен перевірити перетин з кожною з перешкод. Цього достатньо для багатьох простих додатків, таких як відеоігри, і тому багато навчальних онлайн-посібників вчать цьому методу. Однак, як ми побачимо пізніше, існують швидші алгоритми (або навіть ще швидші, якщо перешкодою є простий многокутник або якщо є фіксована кількість полігональних отворів).
Оптимальні алгоритми для точки у простому многокутнику
Для простого многокутника і точки , алгоритм лінійного часу є оптимальним для обчислення області в , яку видно з . Такий алгоритм був вперше запропонований в 1981 році. Однак він досить складний. У 1983 році був запропонований концептуально простіший алгоритм, який мав незначну помилку, виправлену в 1987 році.
Тут буде коротко описаний останній алгоритм. Він просто обходить границю многокутника , обробляючи вершини в тому порядку, в якому вони з'являються, зберігаючи при цьому стек вершин , де — верхівка стека. У стеці зберігаються вершини, видимі з , які зустрілися на поточний момент часу. Якщо згодом, під час виконання алгоритму, для деяких вершин з'ясується, що вони розташовані у затемненій частині , то такі затемненні вершини в будуть видалені зі стека. На момент завершення алгоритму буде складатися з усіх видимих вершин, тобто, це шуканий многокутник видимості. Ефективна реалізація була опублікована в 2014 році.
Оптимальні алгоритми для точки в многокутнику з дірками
Для точки в многокутнику з отворами й вершинами можна показати, що оптимальним алгоритмом у найгіршому випадку є . Такий алгоритм був запропонований в 1995 році разом з доведенням його оптимальності. Проте, він спирається на лінійний алгоритм (тріангуляції многокутника) Чазеля, який є надзвичайно складним.
Оптимальні алгоритми для точки між відрізками
Відрізки, які не перетинаються, за винятком їх кінцевих точок
У випадку коли перешкоди задані множиною з відрізків, які не перетинаються, за винятком їх кінцевих точок, можна показати, що в найгіршому випадку алгоритм є оптимальним. Це пов'язано з тим, що алгоритм многокутника видимості повинен виводити вершини многокутника видимості в відсортованому порядку, тому проблему сортування можна звести до обчислення многокутника видимості.
Зверніть увагу, що будь-який алгоритм, який обчислює многокутник видимості для точки серед відрізків, може бути використаний для обчислення многокутника видимості для всіх інших видів полігональних перешкод, оскільки будь-який полігон може бути розкладений на відрізки.
Розділяй і володарюй
Алгоритм «розділяй і володарюй» для обчислення многокутника видимості був запропонований в 1987 році.
Кутова розгортка
У 1985 і 1986 рр. було запропоновано метод кутового замітання, тобто обертове замітання площини для обчислення видимого многокутника. Ідея полягає в тому, щоб спочатку впорядкувати всі кінці відрізів за полярним кутом, а потім виконати ітерацію за ними у порядку зміни кутів. Під час ітерації рядок подій підтримується у вигляді купи. Ефективна реалізація була опублікована в 2014 році.
Узагальнення на випадок, коли відрізки перетинаються
Задача пошуку многокутника видимості у випадку, коли відрізки перетинаються, зводиться за лінійний час до задачі пошуку [en]. За [en] нижня обгортка, в найгіршому випадку, має кількість вершин, де — обернена функція Акермана. Оптимальний алгоритм «розділяй і володарюй», працюючий у найгіршому випадку, який виконується за , був створений [en] у 1989 році.
Примітки
- Franco P. Preparata and Michael Ian Shamos (1985). Computational Geometry - An Introduction. Springer-Verlag. 1st edition: ; 2nd printing, corrected and expanded, 1988: ; Russian translation, 1989: .
- El Gindy, Hossam; Avis, David (1981). A linear algorithm for computing the visibility polygon from a point. Journal of Algorithms. 2 (2): 186—197. doi:10.1016/0196-6774(81)90019-5.
- Lee, D. T. (May 1983). Visibility of a simple polygon. Computer Vision, Graphics, and Image Processing. 22 (2): 207—221. doi:10.1016/0734-189X(83)90065-8.
- Joe, Barry; Simpson, R. B. (1987). Corrections to Lee's visibility polygon algorithm. BIT Numerical Mathematics. 27 (4): 458—473. doi:10.1007/BF01937271.
- Guibas, Leonidas; Motwani, Rajeev; Raghavan, Prabhakar (1992). The robot localization problem in two dimensions. ACM-SIAM symposium on Discrete algorithms. Society for Industrial and Applied Mathematics.
- Liow, Nicklaus. . Архів оригіналу за 12 травня 2014. Процитовано 9 May 2014.
- Patel, Amit (5 July 2012). . Архів оригіналу за 14 травня 2014. Процитовано 9 May 2014.
- Patel, Amit (5 July 2012). . Архів оригіналу за 12 травня 2014. Процитовано 9 May 2014.
- Bungiu, Francisc; Hemmer, Michael; Hershberger, John; Huang, Kan; Kröller, Alexander (2014). Efficient Computation of Visibility Polygons. arXiv:1403.3905 [cs.CG].
- Heffernan, Paul; Mitchell, Joseph (1995). An optimal algorithm for computing visibility in the plane. SIAM Journal on Computing. 24 (1): 184—201. doi:10.1137/S0097539791221505.
- Suri, Subhash; O'Rourke, Joseph (1986). Worst-case optimal algorithms for constructing visibility polygons with holes. Symposium on Computational geometry. ACM. с. 14—23. doi:10.1145/10515.10517.
- Arkin, E; Mitchell, Joseph (1987). An optimal visibility algorithm for a simple polygon with star-shaped holes (Технічний звіт). № 746.
- Asano, Tetsuo (1985). An efficient algorithm for finding the visibility polygon for a polygonal region with holes. Institute of Electronics, Information, and Communication Engineers. Т. 68, № 9. с. 557—559.
- Hershberger, John (1989). Finding the upper envelope of line segments in time. Information Processing Letters. 33 (4): 169—174. doi:10.1016/0020-0190(89)90136-1.
Посилання
- . Архів оригіналу за 3 травня 2017. (англ.)
Програмне забезпечення
- VisiLibity [ 18 січня 2018 у Wayback Machine.]: Бібліотека C++ з відкритим вихідним кодом для обчислення многокутника видимості в пласких многокутних середовищах
- visibility-polygon-js [ 16 лютого 2017 у Wayback Machine.]: Загальнодоступна бібліотека Javascript для обчислення многокутника видимості для точки у випадку перешкод у вигляді відрізків з використанням методу кутового замітання
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U obchislyuvalnij geometriyi vidimim poligonom abo oblastyu vidimosti tochki r na ploshini sered pereshkod ye mozhlivo neobmezhena mnogokutna oblast vsih tochok ploshini vidima z p Poligon vidimosti takozh mozhe buti viznachenij dlya vidimosti z segmenta abo mnogokutnika Poligoni vidimosti vikoristovuyutsya u robototehnici videoigrah i dlya viznachennya miscya roztashuvannya ob yektiv takih yak najkrashe rozmishennya ohoronciv v hudozhnij galereyi Mnogokutnik vidimosti pokazano zhovtim kolorom Chotiri pereshkodi pokazano sinim kolorom Yaksho vidimist mnogokutnika obmezhena to ce zirkopodibnij mnogokutnik Poligon vidimosti obmezhenij yaksho vsi promeni yaki vihodyat z tochki v kincevomu pidsumku zakinchuyutsya deyakoyu pereshkodoyu Take traplyayetsya napriklad yaksho pereshkodi ce rebra prostogo mnogokutnika a p znahoditsya vseredini mnogokutnika V ostannomu vipadku mnogokutnik vidimosti mozhe buti znajdenij za linijnij chas ViznachennyaFormalno mi mozhemo viznachiti zadachu poshuku plaskogo mnogokutnika vidimosti nastupnim chinom Nehaj S displaystyle S mnozhina pereshkod vidrizkiv abo mnogokutnikiv v R2 displaystyle mathbb R 2 Nehaj p displaystyle p tochka v R2 displaystyle mathbb R 2 yaka ne mistitsya vseredini pereshkodi Dlya tochki p displaystyle p mnogokutnikom vidimosti V displaystyle V bude mnozhina tochok v R2 displaystyle mathbb R 2 takih sho dlya bud yakoyi tochki q displaystyle q z V displaystyle V vidrizok pq displaystyle pq ne peretinaye zhodnu pereshkodu v S displaystyle S DodatkiPoligoni vidimosti korisni v robototehnici Napriklad koli robot v procesi en vikoristovuye taki datchiki yak lidar dlya viyavlennya vidstani do pereshkodi to po suti vin buduye mnogokutnik vidimosti Mnogokutniki vidimosti takozh vikoristovuyutsya u videoigrah isnuye bagato onlajn pidruchnikiv yaki poyasnyuyut prosti algoritmi yih realizaciyi Algoritmi poshuku mnogokutnikiv vidimosti tochkiChislenni algoritmi buli zaproponovani dlya obchislennya poligoniv vidimosti tochki Dlya riznih variantiv zadachi napriklad dlya riznih tipiv pereshkod algoritmi vidriznyayutsya za chasovoyu skladnistyu Nayivni algoritmi Nayivni algoritmi legko zrozumiti i realizuvati ale voni ne en bo zazvichaj ye nabagato povilnishimi za inshi algoritmi Unifikovanij algoritm fizichnogo peretvorennya promeniv U realnomu zhitti tochka sho svititsya osvitlyuye vidimu yij oblast oskilki viprominyuye svitlo v usih napryamkah Ce mozhna zmodelyuvati strilyayuchi promenyami v bagatoh napryamkah Pripustimo sho ye tochka i mnozhina pereshkod Todi algoritm bude virazhenij nastupnim psevdokodom algoritm prostij poganij algoritm p displaystyle p S displaystyle S V displaystyle V displaystyle emptyset dlya 8 0 2p displaystyle theta 0 cdots 2 pi vistriliti promin z kutom 8 displaystyle theta r displaystyle r displaystyle infty dlya kozhnoyi pereshkodi u S displaystyle S r displaystyle r min r displaystyle r vidstan vid p displaystyle p do pereshkodi v comu napryamku dodati vershinu 8 r displaystyle theta r u V displaystyle V povernuti V displaystyle V Teper yakbi mozhna bulo sprobuvati vsyu neperervnu mnozhinu kutiv rezultat buv bi pravilnim Na zhal nemozhlivo dijsno sprobuvati kozhen napryamok cherez obmezhennya na obchislyuvalnu potuzhnist Nablizhennya mozhna stvoriti kinuvshi bagato skazhimo 50 promeniv roztashovanih rivnomirno odin vid odnogo Odnak ce ne tochne rishennya bo mali pereshkodi mozhut buti propusheni mizh dvoma susidnimi promenyami Krim togo vin duzhe povilnij tomu sho dlya otrimannya priblizno takogo zh rishennya mozhe znadobitisya bagato promeniv i mnogokutnik vihidnoyi vidimosti mozhe mati v sobi nabagato bilshe vershin nizh potribno Algoritm peretvorennya dlya kozhnoyi vershini Opisanij ranishe algoritm mozhna znachno pokrashiti yak za shvidkistyu tak i za tochnistyu zrobivshi sposterezhennya sho dostatno strilyati promenyami lishe u vershini kozhnoyi pereshkodi Ce pov yazano z tim sho bud yaki vigini abo kuti uzdovzh mezhi mnogokutnika vidimosti obumovleni deyakoyu vershinoyu na pereshkodi algoritm prostij pokrashennij algoritm p displaystyle p S displaystyle S V displaystyle V displaystyle emptyset dlya kozhnoyi pereshkodi b displaystyle b u S displaystyle S dlya kozhnoyi vershini v displaystyle v z b displaystyle b vistriliti promin z p displaystyle p u v displaystyle v r displaystyle r vidstan vid p displaystyle p do v displaystyle v 8 displaystyle theta kut v displaystyle v vidnosno p displaystyle p dlya kozhnoyi pereshkodi b displaystyle b u S displaystyle S r displaystyle r min r displaystyle r vidstan vid p displaystyle p do b displaystyle b dodati vershinu 8 r displaystyle theta r u V displaystyle V povernuti V displaystyle V Chasova skladnist cogo algoritmu O n2 displaystyle O n 2 Ce pov yazano z tim sho algoritm vidstrilyuye promin dlya kozhnoyi z n displaystyle n vershin i shob pereviriti de zakinchuyetsya promin vin povinen pereviriti peretin z kozhnoyu z O n displaystyle O n pereshkod Cogo dostatno dlya bagatoh prostih dodatkiv takih yak videoigri i tomu bagato navchalnih onlajn posibnikiv vchat comu metodu Odnak yak mi pobachimo piznishe isnuyut shvidshi O nlog n displaystyle O n log n algoritmi abo navit she shvidshi yaksho pereshkodoyu ye prostij mnogokutnik abo yaksho ye fiksovana kilkist poligonalnih otvoriv Optimalni algoritmi dlya tochki u prostomu mnogokutniku Poligon vidimosti dlya tochki u centri pokazana bilim vseredini prostogo mnogokutnika obvedenogo chornim kolorom Dlya prostogo mnogokutnika P displaystyle mathcal P i tochki p displaystyle p algoritm linijnogo chasu ye optimalnim dlya obchislennya oblasti v P displaystyle mathcal P yaku vidno z p displaystyle p Takij algoritm buv vpershe zaproponovanij v 1981 roci Odnak vin dosit skladnij U 1983 roci buv zaproponovanij konceptualno prostishij algoritm yakij mav neznachnu pomilku vipravlenu v 1987 roci Tut bude korotko opisanij ostannij algoritm Vin prosto obhodit granicyu mnogokutnika P displaystyle mathcal P obroblyayuchi vershini v tomu poryadku v yakomu voni z yavlyayutsya zberigayuchi pri comu stek vershin S s0 s1 st displaystyle mathcal S s 0 s 1 cdots s t de st displaystyle s t verhivka steka U steci zberigayutsya vershini vidimi z p displaystyle p yaki zustrilisya na potochnij moment chasu Yaksho zgodom pid chas vikonannya algoritmu dlya deyakih vershin z yasuyetsya sho voni roztashovani u zatemnenij chastini S displaystyle mathcal S to taki zatemnenni vershini v S displaystyle mathcal S budut vidaleni zi steka Na moment zavershennya algoritmu S displaystyle mathcal S bude skladatisya z usih vidimih vershin tobto ce shukanij mnogokutnik vidimosti Efektivna realizaciya bula opublikovana v 2014 roci Optimalni algoritmi dlya tochki v mnogokutniku z dirkami Dlya tochki v mnogokutniku z h displaystyle h otvorami j n displaystyle n vershinami mozhna pokazati sho optimalnim algoritmom u najgirshomu vipadku ye 8 n hlog h displaystyle Theta n h log h Takij algoritm buv zaproponovanij v 1995 roci razom z dovedennyam jogo optimalnosti Prote vin spirayetsya na linijnij algoritm triangulyaciyi mnogokutnika Chazelya yakij ye nadzvichajno skladnim Optimalni algoritmi dlya tochki mizh vidrizkami Vidrizki yaki ne peretinayutsya za vinyatkom yih kincevih tochok Poligon vidimosti dlya tochki v centri pokazana bilim kolorom sered mnozhini dovilnih vidrizkiv na ploshini yaki mozhut peretinatisya tilki na kincyah ta vistupayut yak pereshkodi pokazani chornim kolorom U vipadku koli pereshkodi zadani mnozhinoyu z n displaystyle n vidrizkiv yaki ne peretinayutsya za vinyatkom yih kincevih tochok mozhna pokazati sho v najgirshomu vipadku algoritm 8 nlog n displaystyle Theta n log n ye optimalnim Ce pov yazano z tim sho algoritm mnogokutnika vidimosti povinen vivoditi vershini mnogokutnika vidimosti v vidsortovanomu poryadku tomu problemu sortuvannya mozhna zvesti do obchislennya mnogokutnika vidimosti Zvernit uvagu sho bud yakij algoritm yakij obchislyuye mnogokutnik vidimosti dlya tochki sered vidrizkiv mozhe buti vikoristanij dlya obchislennya mnogokutnika vidimosti dlya vsih inshih vidiv poligonalnih pereshkod oskilki bud yakij poligon mozhe buti rozkladenij na vidrizki Rozdilyaj i volodaryuj Algoritm rozdilyaj i volodaryuj dlya obchislennya mnogokutnika vidimosti buv zaproponovanij v 1987 roci Kutova rozgortka U 1985 i 1986 rr bulo zaproponovano metod kutovogo zamitannya tobto obertove zamitannya ploshini dlya obchislennya vidimogo mnogokutnika Ideya polyagaye v tomu shob spochatku vporyadkuvati vsi kinci vidriziv za polyarnim kutom a potim vikonati iteraciyu za nimi u poryadku zmini kutiv Pid chas iteraciyi ryadok podij pidtrimuyetsya u viglyadi kupi Efektivna realizaciya bula opublikovana v 2014 roci Uzagalnennya na vipadok koli vidrizki peretinayutsya Zadacha poshuku mnogokutnika vidimosti u vipadku koli vidrizki peretinayutsya zvoditsya za linijnij chas do zadachi poshuku en Za en nizhnya obgortka v najgirshomu vipadku maye 8 na n displaystyle Theta n alpha n kilkist vershin de a n displaystyle alpha n obernena funkciya Akermana Optimalnij algoritm rozdilyaj i volodaryuj pracyuyuchij u najgirshomu vipadku yakij vikonuyetsya za 8 nlog n displaystyle Theta n log n buv stvorenij en u 1989 roci PrimitkiFranco P Preparata and Michael Ian Shamos 1985 Computational Geometry An Introduction Springer Verlag 1st edition ISBN 0 387 96131 3 2nd printing corrected and expanded 1988 ISBN 3 540 96131 3 Russian translation 1989 ISBN 5 03 001041 6 El Gindy Hossam Avis David 1981 A linear algorithm for computing the visibility polygon from a point Journal of Algorithms 2 2 186 197 doi 10 1016 0196 6774 81 90019 5 Lee D T May 1983 Visibility of a simple polygon Computer Vision Graphics and Image Processing 22 2 207 221 doi 10 1016 0734 189X 83 90065 8 Joe Barry Simpson R B 1987 Corrections to Lee s visibility polygon algorithm BIT Numerical Mathematics 27 4 458 473 doi 10 1007 BF01937271 Guibas Leonidas Motwani Rajeev Raghavan Prabhakar 1992 The robot localization problem in two dimensions ACM SIAM symposium on Discrete algorithms Society for Industrial and Applied Mathematics Liow Nicklaus Arhiv originalu za 12 travnya 2014 Procitovano 9 May 2014 Patel Amit 5 July 2012 Arhiv originalu za 14 travnya 2014 Procitovano 9 May 2014 Patel Amit 5 July 2012 Arhiv originalu za 12 travnya 2014 Procitovano 9 May 2014 Bungiu Francisc Hemmer Michael Hershberger John Huang Kan Kroller Alexander 2014 Efficient Computation of Visibility Polygons arXiv 1403 3905 cs CG Heffernan Paul Mitchell Joseph 1995 An optimal algorithm for computing visibility in the plane SIAM Journal on Computing 24 1 184 201 doi 10 1137 S0097539791221505 Suri Subhash O Rourke Joseph 1986 Worst case optimal algorithms for constructing visibility polygons with holes Symposium on Computational geometry ACM s 14 23 doi 10 1145 10515 10517 Arkin E Mitchell Joseph 1987 An optimal visibility algorithm for a simple polygon with star shaped holes Tehnichnij zvit 746 Asano Tetsuo 1985 An efficient algorithm for finding the visibility polygon for a polygonal region with holes Institute of Electronics Information and Communication Engineers T 68 9 s 557 559 Hershberger John 1989 Finding the upper envelope of n displaystyle n line segments in O nlog n displaystyle O n log n time Information Processing Letters 33 4 169 174 doi 10 1016 0020 0190 89 90136 1 Posilannya Arhiv originalu za 3 travnya 2017 angl Programne zabezpechennya VisiLibity 18 sichnya 2018 u Wayback Machine Biblioteka C z vidkritim vihidnim kodom dlya obchislennya mnogokutnika vidimosti v plaskih mnogokutnih seredovishah visibility polygon js 16 lyutogo 2017 u Wayback Machine Zagalnodostupna biblioteka Javascript dlya obchislennya mnogokutnika vidimosti dlya tochki u vipadku pereshkod u viglyadi vidrizkiv z vikoristannyam metodu kutovogo zamitannya