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.
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?
fonte
Respostas:
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.
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.
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.)
fonte
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.
fonte