Existem várias maneiras de ponderar distâncias para a construção de polígonos de Thiessen. A idéia básica na construção delas é baseada na comparação entre a distância entre um ponto arbitrário x e dois pontos fixos de p e q ; você precisa decidir se x é "mais próximo" de p do que q ou não. Para este fim - pelo menos conceitualmente - consideramos as distâncias dp = d ( x , p ) e dq = d ( x , q ). A ponderação geralmente ocorre de duas maneiras: os pontos podem receber pesos numéricos positivos wp e wq e as próprias distâncias podem ser transformadas.
Para fazer sentido, a transformação (que vou escrever como f ) deve aumentar à medida que as distâncias aumentam; isto é, f (d ')> f (d) sempre que d'> d> = 0. Exemplos de tais transformações são f (d) = d + 1, f (d) = d ^ 2 (Lei da Gravitação de Varejo de Reilly ), f (d) = 1-1 / d (assumindo que todas as distâncias são menores que 1), f (d) = log (d), f (d) = exp (d) -1.
Diríamos então que x está "mais próximo" de p do que de q exatamente quando
f (d ( x , p )) / wp <f (d ( x , q )) / wq.
Observe a divisão pelos pesos, em vez da multiplicação: isso significa que pesos grandes tendem a "puxar" pontos a distâncias maiores. Você verá isso no exemplo em execução abaixo.
Aqui está a coisa linda e o objetivo dessa exposição um tanto abstrata: embora as regiões de Thiessen resultantes possam ter limites complexos e extremamente difíceis de calcular, eles são relativamente fáceis de calcular usando uma representação baseada em grade. Aqui está a receita:
Para cada ponto de entrada p , calcule sua grade de distância euclidiana [d (p)].
Use Álgebra de Mapa para aplicar fe pesos, reexpressando cada grade de distância como
[fp] = f ([d (p)]) / wp.
Aqui está um exemplo usando f (d) = 100 + d ^ (3/2); a escala é de 400 por 600.
À medida que f (d) aumenta, o valor fica mais escuro. Evidentemente, a distância neste exemplo é em relação ao ponto vermelho central; os outros quatro pontos obtêm seus cálculos de distância separados (não mostrados). As áreas dos pontos são proporcionais aos pesos, que são 2, 10, 3, 4 e 5.
Calcule o mínimo local de todas essas grades [fp]. Chame isso de [f]. Aqui está um exemplo.
Ao comparar [f] com cada [fp], para cada célula da grade, atribua o identificador do primeiro p para o qual [f]> = [fp]. (Isso pode ser feito em uma etapa com uma operação de posição mais baixa , por exemplo.)
(Duvido que exista um algoritmo em qualquer lugar que calcule uma solução em formato vetorial para esta função de ponderação f.)
Obviamente, se você tiver mais do que um punhado de pontos p, você escreverá isso e, se o número deles chegar a milhares, você provavelmente abandonará a tentativa como impraticável em termos computacionais (embora haja maneiras de acelerar o cálculo lado a lado).
Outro exemplo, mostrando os polígonos de Thiessen em um elipsóide, aparece em /gis//a/17377/ .