Istnieje wiele sposobów ważenia odległości do konstruowania wielokątów Thiessena. Podstawowa idea ich budowy polega na porównaniu odległości między dowolnym punktem x a dwoma stałymi punktami p i q ; musisz zdecydować, czy x jest „bliżej” do p niż do q, czy nie. W tym celu - przynajmniej koncepcyjnie - rozważamy odległości dp = d ( x , p ) i dq = d ( x , q ). Ważenie odbywa się zwykle na dwa sposoby: punktom można nadać dodatnie wagi liczbowe wp i wq, a same odległości można przekształcić.
Aby mieć sens, transformacja (którą napiszę jako f ) powinna rosnąć wraz ze wzrostem odległości; to znaczy, f (d ')> f (d) ilekroć d'> d> = 0. Przykładami takich przekształceń są f (d) = d + 1, f (d) = d ^ 2 (prawo grawitacji detalicznej Reilly'ego ), f (d) = 1 - 1 / d (przy założeniu, że wszystkie odległości są mniejsze niż 1), f (d) = log (d), f (d) = exp (d) -1.
Powiedzielibyśmy wtedy, że x jest „bliżej” do p niż do q dokładnie kiedy
f (d ( x , p )) / wp <f (d ( x , q )) / wq.
Zwróć uwagę na podział według ciężarów zamiast pomnożenia: oznacza to, że duże ciężary będą miały tendencję do „przyciągania” punktów na większe odległości. Zobaczysz to w działającym przykładzie poniżej.
Oto piękna rzecz i sedno tej nieco abstrakcyjnej ekspozycji: chociaż powstałe regiony Thiessen mogą mieć złożone, niezwykle trudne do obliczenia granice, są one stosunkowo łatwe do obliczenia przy użyciu reprezentacji opartej na siatce. Oto przepis:
Dla każdego punktu wejściowego p oblicz jego siatkę odległości euklidesowej [d (p)].
Użyj Algebry Map, aby zastosować f i wagi, a tym samym ponownie wyrazić każdą siatkę odległości jako
[fp] = f ([d (p)]) / wp.
Oto przykład wykorzystujący f (d) = 100 + d ^ (3/2); skala wynosi 400 na 600.
W miarę wzrostu f (d) wartość staje się ciemniejsza. Najwyraźniej odległość w tym przykładzie dotyczy centralnego czerwonego punktu; pozostałe cztery punkty otrzymują osobne obliczenia odległości (nie pokazano). Obszary kropek są proporcjonalne do ich wag, które wynoszą 2, 10, 3, 4 i 5.
Oblicz lokalne minimum wszystkich tych siatek [fp]. Nazwij to [f]. Oto przykład.
Porównując [f] z każdym [fp], do każdej komórki siatki przypisz identyfikator pierwszego p, dla którego [f]> = [fp]. (Można to zrobić na przykład w jednym kroku z operacją najniższego położenia ).
(Wątpię, czy istnieje algorytm, który obliczy rozwiązanie w formacie wektorowym dla tej funkcji ważącej f.)
Oczywiście, jeśli masz więcej niż garść punktów p , skryptujesz to, a jeśli ich liczba osiągnie tysiące, prawdopodobnie porzucisz tę próbę jako niewykonalną obliczeniowo (chociaż istnieją sposoby na przyspieszenie obliczeń poprzez ich kafelkowanie).
Kolejny przykład pokazujący wielokąty Thiessena na elipsoidzie pojawia się na stronie /gis//a/17377/ .
To, czego chcesz, to ważony diagram Voronoi: http://en.wikipedia.org/wiki/Weighted_Voronoi_diagram znany również jako kołowa teselacja Dirichleta, gdy jest wykonywany z mnożnikami w płaszczyźnie 2D. Wydaje się, że ktoś zbudował rozszerzenie arcgis 9, aby je zbudować: http://arcscripts.esri.com/details.asp?dbid=15481 Z instrukcją obsługi dostępną tutaj http://geography.unt.edu/~pdong/software .htm oraz artykuł opublikowany w Dong, P., 2008. Generowanie i aktualizowanie multiplikatywnie ważonych diagramów Voronoi dla cech punktów, linii i wielokątów w GIS. Computers & Geosciences, tom 34, wydanie 4, strony 411-421.
Istnieje niedawny artykuł na temat algorytmu wektorowego (zakładam, że algorytm P Dong jest oparty na rastrze). http://www.sciencedirect.com/science/article/pii/S0098300411003037 Streszczenie mówi, że kod c # jest zawarty.
źródło