| Повече ▼

Как да се изчисли набор от минимални ограничаващи полета за многоъгълник

Как да се изчисли набор от минимални ограничаващи полета за многоъгълник


Трябва да изчисля набор от минимални ограничаващи полета за многоъгълник. Ако имам сложен многоъгълник, искам да го обгърна с набор от малки кутии, вместо с голям.


Предполагам, че това, което искате да направите, е да създадете многоъгълна решетка и да изберете всички клетки от мрежата, които пресичат геометрията на многоъгълника.

Ако съм прав, моля, преформатирайте въпроса си, защото няма смисъл такъв, какъвто е сега. По дефиниция геометрията има точно една ограничаваща кутия или минимален ограничаващ правоъгълник, както се нарича.


Повечето пространствени програми ще ви позволят да намерите ограничаваща кутия. Използването на макс./Мин. Координати в посоки lon/lat също ще улесни установяването на ъглови координати за ограничаваща рамка. Тук ще намерите отговора на това конкретно предизвикателство с помощта на python в QGIS.

Що се отнася до разделянето му, можете да използвате всеки набор от многоъгълници. Можете да създадете мрежа по ваш избор или да използвате съществуваща. След това направете пресичане между ограничаващата ви кутия и мрежата/полигона, която използвате.


С ограничаваща кутия предполагам, че имате предвид полето (квадрат), в което е вписан кръгът, както е на тази снимка:

Забележете, че радиусът на окръжността е точно половината от дължината на страна на квадрата.

Така че, ако центърът на окръжността е $ (10, -5) $ и радиусът на окръжността е $ 23 $, и ако приемем стандартна координатна система ($ y $-стойностите се увеличават нагоре и $ x $-стойностите се увеличават в правилната посока), тогава ъглите на кутията са разположени в следните точки:


Степен на покритие

Степента на покритие представлява външната граница на покритието. Това е минималният ограничаващ правоъгълник, който определя границите на координатите (крайни минимални и максимални координати) на точките на етикетите на дъгите на покритие и по дефиниция полигони, маршрутни системи и региони.

Информацията за географския обхват за покритие се съхранява във файла bnd.adf. Файлът bnd.adf се използва от много софтуерни приложения на Esri за задаване на географския обхват за изготвяне на покритие. В допълнение, той често се използва като обхват на картата по подразбиране за бързо показване на покритие. Много пространствени процеси използват файла bnd.adf, за да определят дали едно покритие припокрива друго и да сортират функциите на покритие по местоположение за обработка.

BND файлът съдържа следните елементи:

X-координатата на долния ляв ъгъл на степента на покритие

Y-координатата на долния ляв ъгъл на степента на покритие

X-координатата на горния десен ъгъл на степента на покритие

Y-координатата на горния десен ъгъл на степента на покритие

Координатите за връзки, тикове и анотации могат да попадат извън файла bnd.adf. Покритието, което не съдържа дъги или точки на етикета (или единична точка на етикета), ще има неопределен bnd.adf.

Обикновено ArcGIS поддържа степента за вас, като я актуализира, когато добавяте функции или премахвате функции от покритие. Ако по някаква причина показаната степен не съответства на действителната степен на функциите, щракнете върху Fit в диалоговия прозорец Свойства на покритието, за да преизчислите степента на покритие. Като алтернатива можете да въведете нови стойности на степента в съответните текстови полета.


Използването на numpy прави управлението на голямо количество координати много по -ефективно. За този пример ние ’ ще приемем, че сте съхранили координатите в (n, 2) -образен масив. За примерните координати по -горе това е лесно:

Можем да използваме вградени функции numpy ’s min и max, за да изчислим min/max, вместо да ги пишем сами. Можете да разгледате изходния код, но за повечето приложения се препоръчва да инсталирате UliEngineering и просто да използвате кода:

Можете да използвате това в списък с координати, без да ги преобразувате изрично в масив с числа, защото min и max ще преобразуват списъка имплицитно. Това обаче е неефективно, тъй като ще бъде преобразувано два пъти: Веднъж в мин и веднъж в макс.


Откриване на китката въз основа на минимална ограничаваща кутия и геометрични характеристики

Откриването на китката е решаващ елемент в оценката на позирането на ръцете и процесите на разпознаване на жестове с ръце в приложенията за взаимодействие човек-компютър. Повечето методи използват хоризонтални паралелни линии, за да сканират за местоположението на линията на китката. Предизвикателните проблеми при откриването на китката са определянето на ориентацията и локализирането на хоризонталните паралелни линии, които сканират за различни пози на ръцете. Предложеният метод автоматично открива китката, въз основа на минимална ограничаваща кутия и геометрични характеристики. Той също така определя началните и крайните точки за локализиране на сканирането. При оценката се използва набор от 1240 изображения на ръце с данни за истинска основа, взети от три набора от данни. Изображенията на ръката съдържат няколко жеста и лица, за да докажат, че методът е устойчив срещу различни жестове. Оценката показва, че методът успешно открива ориентацията на изображението и точките на китката с висока точност.


Какъв е методът за намиране на минималния граничен обем, представен от равнините?

Поради липса на по -добър метод, предлагам триангулиране на повърхността на вашата форма и повторение на тези триъгълници, изчисляване на детерминанта за всеки и добавяне на всички тези. Не забравяйте да използвате последователна ориентация за триъгълниците, така че всички да са ориентирани по един и същи начин, когато се гледат отвътре. Разделете резултата на 6 и имате обем. Причината е, че добавяте редица ориентирани обеми на пирамиди, които се отменят извън формата ви и в крайна сметка описват точно интериора.

Също така, дали формата има безкрайно измерение?


Геометрични колекции (по избор) ¶

Тази част не е задължителна, но съдържа полезна информация, свързана с изграждането и използването на геометрични колекции и някои специални геометрични обекти -като ограничителна кутия.

В някои случаи е полезно да съхранявате напр. множество линии или многоъгълници под една функция (т.е. един ред във Shapefile представлява повече от един ред или многоъгълен обект). Колекциите от точки се реализират чрез използване на обект MultiPoint, колекции от криви чрез използване на обект MultiLineString и колекции от повърхности чрез обект MultiPolygon. Тези колекции не са изчислително значими, но са полезни за моделиране на определени видове функции. Y-образна линия (като път) или множество полигони (например острови на подобен) могат да бъдат представени добре като цяло чрез използване на MultiLineString или MultiPolygon съответно. Създаване и визуализиране на минимално ограничаващо поле, напр. около вашите точки от данни е наистина полезна функция за много цели (например опитвайки се да разберете степента на вашите данни), тук ние демонстрираме как да създадете такава с помощта на Shapely.

Геометричните колекции могат да бъдат конструирани по следния начин:

Можем да видим, че изходите са подобни на основните геометрични обекти, които създадохме преди, но сега тези обекти съдържат множество характеристики на тези точки, линии или многоъгълници.

Събиране на геометрия -атрибути и функции на обекти¶

Също така можем да получим много полезни атрибути от тези обекти:

От горното можем да видим, че MultiPolygons имат точно същите атрибути, налични като единични геометрични обекти, но сега информацията като площ изчислява площта на ВСИЧКИ отделни обекти, комбинирани. Има и някои допълнителни функции, като например е валиден атрибут, който казва дали полигоните или линиите се пресичат помежду си.

Стартиране в мрежата/MyBinder:

Благодарности:

& копиране Авторско право 2019, Пейзажна геоинформатика Последно актуализирано на 04 март 2020 г.


2 отговора 2

Може да намерите подробен алгоритъм на Drexel Math Forum, благодарение на Владимир Зайч. Това е разхвърляно, но елементарно изчисление. Първо ще трябва да изчислите центъра на кръга, съдържащ дъгата, и началния и крайния ъгъл, изчисление, което може да се намери в цялата мрежа, например на страницата MathWorld на Кръг.

Успях да го направя. Първата фаза е да се изчисли центърът на окръжността и ъглите, както е казал Йосиф. След това трябва да изчислите ъглите между вектора (1,0) и (x_n-cx, y_n-cy), където n е [0,1,2]. Първият и последният ъгъл заедно с окръжността определят сектор. Сега изчислете четирите точки на компаса на кръга. Север, Изток, Юг и Запад. Ключово прозрение е, че единствените точки, които могат да се пресичат с bbox, са краят на дъгата, стартът и тези четири „компас понита“. Филтрирайте тези от тези шест точки, начало, край, север, изток, юг, запад, които са извън предварително дефинирания сектор. След това вземете крайните точки от всяка точка и създайте bbox от тях.

EDIT: В крайна сметка използвах CAS система за решаване на уравненията, даващи cx и cy, тъй като е разхвърляна и дълга, но концептуално лесна математика.

Ето кода на Haskell, който прави това:


Опростен вариант: правоъгълници

Да предположим, че ще се съсредоточим върху по -лесния случай, когато $ mathcal

$ трябва да е правоъгълник, подравнен по оста. Тогава мога да дам алгоритъм за $ O (n^2 ( lg n)^2) $.

Без да се губи общността, $ x $ -координатата на лявата и дясната страна на този правоъгълник трябва да се съгласува с $ x $ -координатата на някои двойки точки и по същия начин за горната и долната страна.

И така, познайте $ x $ -координатата на лявата страна на правоъгълника (има $ le n $ възможности), да речем $ x_L $. Сега направете двоично търсене по ширината на правоъгълника (има $ le n $ възможности), като използвате следните идеи.

Като се има предвид предположението за ширината $ w $ на правоъгълника, можете да изчислите максималния брой точки, които могат да се поберат в допустим правоъгълник с тези $ x $ -координати за лявата и дясната страна, както следва. Започнете с филтриране на всички точки, чиято $ x $ -координата не е в $ [x_L, x_L+w] $. Сортирайте останалите точки по оста им $ y $. Сега потърсете $ y $ -value $ y_B $ за долната страна на правоъгълника, което увеличава максимално броя на останалите точки, чиято $ y $ -координата е в диапазона $ [y_B, y_B+A/w] $. Това може да бъде намерено с ясно линейно сканиране на останалите точки (с две указатели, които напредват монотонно).

С това, предвид $ x_L $, можете да направите двоично търсене за $ w $. Всяко предположение при $ w $ отнема $ O (n lg n) $ работа за изчисляване на максималния брой точки, които могат да се поберат в правоъгълник от този вид. Тъй като има $ le n $ възможни стойности за $ w $, ще направите $ O ( lg n) $ итерации в двоичното търсене. Тъй като има $ le n $ възможности за $ x_L $, общото време за изпълнение е $ O (n^2 ( lg n)^2) $.

Тъй като правоъгълникът е изпъкнал многоъгълник, това ви дава долна граница на броя на точките, които могат да бъдат покрити от изпъкнал многоъгълник с площ $ le A $. Може да не е особено тясна долна граница, но може би е начало.


Най -големият кръг, затворен в ориентирана минимална ограничаваща кутия, но не включва точки/линии

Чудя се дали някой може да предложи начин за намиране на най -големия кръг, който може да се побере в ориентираното минимално ограничаващо поле за набор от точки/линии, който не включва нито една от точките/линиите.

Помислете за тези две изображения:

Всяко изображение е затворено от неговата ориентирана минимална ограничаваща кутия (точно успоредна на оста X-Y, за да улесни нещата).

Фигурата & quotCross & quot ще има кръг, който се вписва в един от триъгълниците, докато фигурата & quotTee & quot ще има кръг, който ще се побере от едната страна на & quotT. & Quot

По този начин въпросът е да се намери обобщен подход, който да намери такава окръжност и нейния радиус/диаметър.

Изглежда, че това е различен проблем от намирането на минималния граничен кръг, максималния вписан кръг или най -големия празен кръг.

Най -големият проблем с празния кръг изглежда близо, но (ако е фокусиран само върху точките/линиите) ще надвишава размера на ограничаващата кутия.

Търся обобщен начин за намиране на окръжността и нейния радиус/диаметър, който да работи за всяка ориентирана минимална ограничаваща кутия и брой точки/линии в 2D пространство.


Гледай видеото: Как сделать ОБЪЕМНЫЙ КОНУС из бумаги?