Estoy trabajando con un motor de juego, y mi tarea es agregar código para simular la fractura de mallas rígidas.
En este momento solo estoy trabajando en romper un cubo.
Estoy usando el algoritmo de Voronoi para hacer un fragmento fracturado (realista) y estoy usando el método de medio plano para generar una celda de Voronoi.
Ahora, la forma en que hago esto es para cada punto inicial, hago planos que son planos bisectores perpendiculares (las líneas negras rectas en la imagen) con el resto de los puntos iniciales y calculo las intersecciones de todos estos planos para darme puntos distintos ( todos los puntos naranjas).
He llegado hasta aquí.
De todos estos puntos de intersección calculados, solo necesito los que están más cerca y que encierran el punto inicial (los puntos encerrados en rojo) y necesito descartar todo el resto.
Información que tengo:
1) Ecuaciones planas de todos los planos (definidas por vectores normales normalizados y su distancia desde el origen)
2) Puntos de intersección (que he calculado)
¿Alguien puede ayudarme a descubrir cómo puedo encontrar los puntos encerrados en rojo?
fuente
Respuestas:
Siguiendo el método de medio plano , habrá encontrado los segmentos de línea en cada otro punto y las bisectrices perpendiculares de cada uno de esos
que luego cruzaste para encontrar vértices potenciales de la célula Voronoi.
Ahora, desea excluir los que intersecan cualquiera de los semiplanos "distantes" formados por las bisectrices.
Coloreé los semiplanos "distantes" en azul translúcido para mayor claridad.
Aquí, los dos puntos rojos marcados pasan la prueba: no están dentro de ningún semiplano. El punto rojo no circulado no pasa, ya que está dentro del semiplano formado hacia el punto en la esquina superior derecha.
Esto efectivamente significa probar si cada punto está en el otro lado de cada línea bisectriz (en relación con el sitio Voronoi) y descartar los que están. (Tenga cuidado con los errores de redondeo).
fuente
Simplemente puede iterar sobre los bordes y filtrar todos los vértices que no están en el mismo semiplano con el punto de interés.
Como optimización, itere desde los bordes más cercanos hasta los más lejanos. Creo que incluso puede filtrar vértices mientras genera cortes.
Es como cortar el pastel con un cuchillo sin fin, hasta que solo quede un pequeño pedazo con cereza. Si te gustan las analogías. Simplemente corte y vea qué parte se tomará y cuál se descartará.
fuente