¿Cómo puedo distribuir puntos sobre una superficie implícita, para concentrarlos más densamente en áreas de mayor curvatura?
He considerado agregar puntos al azar y rechazar puntos no requeridos en función de la curvatura, pero me gustaría saber si hay un mejor enfoque que ofrezca una distribución más uniforme sobre áreas de curvatura similar, mientras que aún proporciona la mayor densidad requerida en alta regiones de curvatura.
Estoy buscando específicamente el uso de estos puntos para una triangulación de la superficie, y no quiero crear más triángulos de los que necesito para partes relativamente planas.
Esto se aplicará a formas con una derivada conocida para que se pueda calcular la curvatura en un punto dado.
Esto no necesita ser un enfoque en tiempo real.
fuente
Respuestas:
La idea que intentaría aplicar sería la siguiente: hago el ejemplo para la curva, pero debería ser sencillo para la aplicación de la superficie.
Digamos que tenemos una curva uniformemente parametrizada. Digamos que el parámetro de la curva es . Su objetivo es muestrear el punto correspondiente al valor de modo que la curvatura sea alta.s sγ s s
Si obtiene la magnitud de la curvatura , esto también será función de . Entonces, si normaliza la función, obtendrá una distribución de probabilidad. Si obtiene la integral de dicha distribución, tendrá la distribución acumulativa. Llamemos a esta función acumulativa .s | c | C ( s )c s |c| C(s)
El problema de muestreo de una distribución dada por la función acumulativa es bien conocido, por lo que, básicamente, una vez que haya muestreado un conjunto de valores , dicho valor estará relacionado con los puntos de interés.s0,s1,…,sn
La aplicación de este método en el caso de la superficie debe ser recta, ya que básicamente tiene una función de distribución acumulativa bidimensional, pero el problema de muestreo es exactamente el mismo.
Solo para dar algunos detalles, es básicamente un muestreo de una distribución dada la función acumulativa que implica dos pasos:
tomar un valor aleatorio en el intervalo , digamosk[0,1] k
resuelva la ecuación .C(s)=k
Este enfoque es exacto, por supuesto que es costoso, pero si le gusta, puede trabajar en la optimización.
fuente
Un buen punto de partida es el artículo clásico Utilizando partículas para muestrear y controlar superficies implícitas , publicado en SIGGRAPH 1994.
Una simple simulación de partículas descrita en el documento Muestreo de objetos implícitos con sistemas de partículas basados físicamente ( Computers & Graphics , 1996) para curvas también funciona para superficies; vea Textura dinámica para superficies implícitas para ver ejemplos.
Para un ejemplo más reciente, vea Representación de forma y tono para superficies implícitas ( Computers & Graphics , 2011).
fuente
El siguiente enfoque ingenuo probablemente no arrojará puntos tan bien distribuidos como los dados por Lhf , pero debería ser mucho más fácil de implementar y computacionalmente más rápido:
Para dos puntos e , denota la distancia promedio que desea que tengan los puntos con la curvatura promedio de e , por ejemplo, alguna constante multiplicada por la inversa de la curvatura promedio de e .y d ( x , y ) x y x yx y d(x,y) x y x y
Ahora construya su colección de puntos sucesivamente:A
Seleccione un punto aleatorio y agregue dos puntos, de modo que los tres puntos formen un triángulo equilátero con una longitud de borde .d ( x , x )x d(x,x)
Agregue todos los puntos a y márquelos como adyacentes.A
Haga lo siguiente repetidamente hasta que ya no haya adyacencias en :A
Compruebe si está más cerca que a cualquier punto de que aún esté adyacente a otro punto.d ( x , y ) Az d(x,y) A
Al final, debería ser una colección de puntos que coincidan con sus criterios. De alguna manera, acabas de crear una triangulación, pero puede ser patológica y, por lo tanto, probablemente deberías triangular los puntos nuevamente.A
fuente