suavizar las impresoras impresora fallas errores consecuencias comunes como c++ algorithm 3d mesh smoothing

c++ - las - Algoritmo para suavizar los bordes de una malla 3D abierta



fallas de las impresoras 3d (1)

Tengo una malla 3D que representa una superficie con algunos límites ásperos que me gustaría suavizar:

Estoy usando una estructura de datos de medio borde para almacenar la geometría, así puedo iterar fácilmente sobre los bordes, vértices y caras de los límites. También puedo determinar con bastante facilidad si un par dado de bordes es convexo / cóncavo usando un producto de punto y cruz.

¿Cuál sería el mejor enfoque para alisar los bordes, de modo que formen una línea continua y curva, en lugar de un patrón nítido en las imágenes?


  1. calcular el ángulo entre dos caras vecinas

    Yo lo llamo ada como abs delta angle. Si es más grande que el umbral, significa que este punto es el borde. Puede calcularlo como max de todos los ángulos entre todas las líneas de borde. En 2D, se ve así:

    en malla 3D hay más de 2 líneas por punto, por lo que debe verificar todas las combinaciones y seleccionar la más grande

    ada=max(abs(acos(n(i).n(j)))

    donde n(i),n(j) son vectores normales de las caras vecinas donde i != j

  2. identificar zonas problemáticas

    para encontrar puntos donde ada > threshold y crear una lista de estos puntos

  3. filtrar esta lista

    si este punto está demasiado lejos de cualquier otro ( distance>threshold ), quítelo de la lista para conservar la forma geométrica

  4. puntos suaves

    tienes que ajustar este paso para que coincida con tus necesidades. Haría esto:

    busque un grupo de puntos en la lista que estén muy juntos y aplique algunos promedios geométricos o numéricos sobre ellos, por ejemplo:

    pnt(i)=0.5*pnt(i)+0.25*pnt(i-1)+0.25*pnt(i+1)

    esto se puede aplicar repetitivo

    los puntos azules y rojos son puntos originales, los puntos verdes son puntos suavizados