Tengo varios objetos Spline2D en mi código, cada uno de los cuales tiene un método de Posición, Velocidad y Aceleración que devuelve un vector de la cantidad especificada en un momento determinado. He estado usando estos vectores para construir geometría para crear trazos de gradiente para las curvas, pero estoy teniendo problemas con las auto intersecciones en curvas pronunciadas. Como ejemplo, aquí hay una curva en la que estoy teniendo esto:
Estructura metálica: http://twitpic.com/2zplw1/full
Relleno: http://twitpic.com/2zpmnt/full
Como puede ver, en la segunda curva, la parte interna se cruza, lo que causa ese feo artefacto. ¿Existe un buen algoritmo / método para trazar curvas sin causar esa auto-intersección?
EDITAR : ejemplos más extremos, más una maqueta de lo que me gustaría lograr:
Estructura metálica: http://twitpic.com/2ztwzi/full
Relleno: http://twitpic.com/2ztwkt/full
Resultado ideal (maqueta): http://twitpic.com/2ztxa8/full
Respuestas:
Si está renderizando estos con la GPU y cualquier api 3D moderna (por ejemplo, OpenGL / D3D), me parece que puede deshacerse de esto con pruebas de profundidad. Si asigna sus verts exteriores para ser z = FAR, y sus verts interiores para ser z = NEAR, la prueba de profundidad evitará que se muestre la superposición. Con OpenGL:
Advertencia: esto no funcionará si necesita trazos translúcidos.
fuente
El "Arreglo" dependerá de cómo desee que se vea la salida resultante. El problema no se ha definido realmente bien aquí: ¿qué significa ser?
Te sugiero que primero intentes hacer un ejemplo aún más extremo de la falla, luego, usando Photoshop / Paint para arreglarlo, puedes encontrar inspiración para una solución.
¿Quieres que se pliegue? Superposición con el borde? ¿Tire hacia adentro hasta que no se superponga?
fuente