Como encontro os pontos mais próximos (formando assim um polígono) envolvendo um ponto específico? (Veja a imagem)


8

Estou trabalhando com um mecanismo de jogo e minha tarefa é adicionar código para simular a fratura de malhas rígidas.

No momento, estou trabalhando apenas para quebrar um cubo.

Estou usando o algoritmo de Voronoi para criar um fragmento fraturado (realista) e estou usando o método de meio plano para gerar uma célula de Voronoi.

para encontrar os pontos mais próximos (rodeados de vermelho) ao redor do Voronoi (ponto roxo)

Agora, a maneira como faço isso é para cada ponto inicial, faço planos que são planos bissetoriais perpendiculares (as linhas retas pretas na imagem) com o restante dos pontos iniciais e calculo as interseções de todos esses planos para fornecer pontos distintos ( todos os pontos laranja).

Eu cheguei até aqui.

De todos esses pontos de interseção calculados, preciso apenas dos pontos mais próximos e que encerram o ponto inicial (os pontos cercados em vermelho) e preciso descartar todo o resto.

Informações que eu tenho:

1) Equações planas de todos os planos (definidos por vetores normais normalizados e sua distância da origem)

2) Pontos de interseção (que eu calculei)

Alguém pode me ajudar a descobrir como posso encontrar os pontos cercados em vermelho?


Sem resposta, mas esse é um problema interessante!
Tim Holt

Respostas:


4

Seguindo o método de meio plano , você encontrará os segmentos de linha para todos os outros pontos e os bissetores perpendiculares de cada um desses pontos.

Etapa 1: segmentos de linha passo 2: bissetores perpendiculares

que você cruzou para encontrar possíveis vértices da célula de Voronoi.

Agora, você deseja excluir os que cruzam qualquer um dos semi-planos "distantes" formados pelas bissetoras.

Duas interseções correspondentes, uma inigualável

Eu pintei os meios planos "distantes" em azul translúcido para maior clareza.

Aqui, os dois pontos vermelhos circulados passam no teste: eles não estão dentro de nenhum semiplano. O ponto vermelho sem círculo não passa, pois está dentro do semi-plano formado em direção ao ponto no canto superior direito.

Isso significa efetivamente testar se cada ponto está do outro lado de cada linha bissetora (em relação ao local de Voronoi) e descartar aqueles que estão. (Cuidado com erros de arredondamento.)


Esta resposta foi muito útil. Para verificar se os dois pontos estão do mesmo lado do avião, substituí os vetores nas equações do plano e procurei por seus sinais. Se ambos foram positivos / negativos, estão do mesmo lado. Caso contrário, eles estão do lado oposto. Isso funciona! Meu código parece estar produzindo vértices corretos para os fragmentos Voronoi finalmente!
N

qual programa você usou para gerar essas imagens em sua resposta?
N / a

@nilspin Inkscape .
Anko

3

Você pode simplesmente percorrer as arestas e filtrar todos os vértices que não estão no mesmo meio plano com o ponto de interesse.

Como otimização, itere das bordas mais próximas para as mais distantes. Eu acho que você pode até filtrar vértices enquanto gera fatias.

É como fatiar uma torta com uma faca sem fim, até sobrar apenas um pedacinho de cereja. Se você gosta de analogias. Basta cortar e ver qual parte será tirada e qual será descartada.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.