Imagine que você tem um polígono definido por um conjunto de coordenadas e seu centro de massa é . Você pode tratar o polígono como uma distribuição uniforme com um limite poligonal.
Estou atrás de um método que encontrará a matriz de covariância de um polígono .
Suspeito que a matriz de covariância de um polígono esteja intimamente relacionada ao segundo momento da área , mas, se são equivalentes, não tenho certeza. As fórmulas encontradas no artigo da wikipedia que eu vinculei parecem (um palpite aqui, não está especialmente claro para mim neste artigo) referir-se à inércia rotacional em torno dos eixos x, ye z em vez dos eixos principais do polígono.
(Aliás, se alguém puder me indicar como calcular os eixos principais de um polígono, isso também seria útil)
É tentador apenas executar o PCA nas coordenadas , mas isso ocorre com o problema de que as coordenadas não estão necessariamente distribuídas uniformemente ao redor do polígono e, portanto, não são representativas da densidade do polígono. Um exemplo extremo é o contorno de Dakota do Norte, cujo polígono é definido por um grande número de pontos após o rio Vermelho, além de apenas mais dois pontos que definem a borda ocidental do estado.
fonte
Respostas:
Vamos fazer algumas análises primeiro.
Suponha que dentro do polígono sua densidade de probabilidade seja a função proporcional Então a constante de proporcionalidade é o inverso da integral de sobre o polígono,P p(x,y). p
O baricentro do polígono é o ponto das coordenadas médias, computadas como seus primeiros momentos. O primeiro é
O tensor inercial pode ser representado como a matriz simétrica de segundos momentos calculada após a tradução do polígono para colocar seu baricentro na origem: ou seja, a matriz dos segundos momentos centrais
onde varia de a a O próprio tensor - também conhecido como matriz de covariância - é(k,l) (2,0) (1,1) (0,2).
Um PCA de produz os eixos principais de esses são os autovetores unitários dimensionados por seus autovalores.I(P) P :P:
Em seguida, vamos descobrir como fazer os cálculos. Como o polígono é apresentado como uma sequência de vértices que descreve seu limite orientado é natural invocar∂P,
Por exemplo, com densidade constante ( ou seja , uniforme) podemos (por inspeção) selecionar um dos muitos soluções, comodω=xkyldxdy p, ω(x,y)=−1l+1xkyl+1dx.
O ponto disso é que a integral do contorno segue os segmentos de linha determinados pela sequência de vértices. Qualquer segmento de linha do vértice ao vértice pode ser parametrizado por uma variável real no formatou v t
onde é a direção normal da unidade de paraOs valores de portanto, variam de a Sob este parametrização e são funções lineares de e e são funções lineares do Assim, o integrando da integral de contorno sobre cada aresta se torna uma função polinomial de que é facilmente avaliada para pequeno ew∝v−u u v. t 0 |v−u|. x y t dx dy dt. t, k l.
A implementação dessa análise é tão direta quanto a codificação de seus componentes. No nível mais baixo, precisaremos de uma função para integrar uma forma polinomial sobre um segmento de linha. Funções de nível superior as agregam para calcular os momentos brutos e centrais para obter o baricentro e o tensor inercial, e finalmente podemos operar nesse tensor para encontrar os eixos principais (que são seus autovetores em escala). O
R
código abaixo executa este trabalho. Não faz pretensões de eficiência: destina-se apenas a ilustrar a aplicação prática da análise anterior. Cada função é direta e as convenções de nomenclatura são paralelas às da análise.Incluído no código está um procedimento para gerar polígonos válidos, fechados, simplesmente interceptados e sem auto-interseção (deformando pontos aleatoriamente ao longo de um círculo e incluindo o vértice inicial como seu ponto final para criar um loop fechado). A seguir, algumas instruções para plotar o polígono, exibir seus vértices, unir o baricentro e plotar os eixos principais em vermelho (maior) e azul (menor), criando um sistema de coordenadas orientadas positivamente para o polígono.
fonte
Edit: Não percebeu que whuber já tinha respondido. Vou deixar isso como um exemplo de outra abordagem (talvez menos elegante) para o problema.
A matriz de covariância
Deixe que ser um ponto aleatório a partir da distribuição uniforme sobre um polígono com área . A matriz de covariância é:(X,Y) P A
onde é a variação de , é a variação de e é a covariância entre e . Isso assume média zero, uma vez que o centro de massa do polígono está localizado na origem. A distribuição uniforme atribui densidade de probabilidade constante a cada ponto em , portanto:CXX=E[X2] X CYY=E[Y2] Y CXY=E[XY] X Y 1A P
Triangulação
Em vez de tentar integrar diretamente sobre uma região complicada como , podemos simplificar o problema particionando em sub-regiões triangulares:P P n
No seu exemplo, um possível particionamento é semelhante a este:
Existem várias maneiras de produzir uma triangulação (veja aqui ). Por exemplo, você pode calcular a triangulação de Delaunay dos vértices e descartar as arestas que ficam fora de (já que pode ser não-convexo, como no exemplo).P
As integrais sobre podem então ser divididas em somas de integrais sobre os triângulos:P
Um triângulo possui limites simples e agradáveis, portanto é mais fácil avaliar essas integrais.
Integrando sobre triângulos
Existem várias maneiras de integrar sobre triângulos. Nesse caso, usei um truque que envolve o mapeamento de um triângulo para o quadrado da unidade. Transformar em coordenadores bariêntricos pode ser uma opção melhor.
Aqui estão soluções para as integrais acima, para um triângulo arbitrário definido pelos vértices . Deixei:T (x1,y1),(x2,y2),(x3,y3)
Então:
Juntando tudo
Deixe e contenham as coordenadas x / y dos vértices para cada triângulo , como acima. Conecte em para cada triângulo, observando que os termos da área são cancelados. Isso fornece a solução:vix viy Ti (3) (2)
Eixos principais
Os eixos principais são dados pelos vetores próprios da matriz de covariância , assim como no PCA. Ao contrário do PCA, temos uma expressão analítica para , em vez de precisar calculá-la a partir de pontos de dados amostrados. Observe que os próprios vértices não são uma amostra representativa da distribuição uniforme em ; portanto, não se pode simplesmente pegar a matriz de covariância da amostra dos vértices. Mas, * é * uma função relativamente simples dos vértices, como visto em .C C P C (4)
fonte