Eu tenho vários objetos Spline2D no meu código, cada um deles com um método Position, Velocity e Acceleration que retorna um vetor da quantidade especificada em um determinado momento. Eu tenho usado esses vetores para construir geometria para criar traços de gradiente para as curvas, mas estou tendo problemas com auto-interseções em curvas íngremes. Como exemplo, aqui está uma curva em que estou fazendo isso ocorrer:
Wireframe: http://twitpic.com/2zplw1/full
Preenchido: http://twitpic.com/2zpmnt/full
Como você pode ver, na segunda curva, a parte interna se cruza, o que causa esse artefato feio. Existe um bom algoritmo / método para traçar curvas sem causar essa auto-interseção?
EDIT : exemplos mais extremos, além de uma maquete do que eu gostaria de alcançar:
Wireframe: http://twitpic.com/2ztwzi/full
Preenchido: http://twitpic.com/2ztwkt/full
Resultado ideal (mock-up): http://twitpic.com/2ztxa8/full
Respostas:
Se você as estiver renderizando com a GPU e qualquer API 3D moderna (por exemplo, OpenGL / D3D), parece-me que você pode se livrar disso com testes de profundidade. Se você atribuir seus verts externos a z = FAR e seus verts internos a z = NEAR, o teste de profundidade deverá impedir a exibição da sobreposição. Com o OpenGL:
Advertência: isso não funcionará se você precisar de traços translúcidos.
fonte
O "Fix" vai depender de como você deseja que a saída resultante seja. O problema ainda não foi definido muito bem aqui: como deve ser?
Eu sugiro que você primeiro tente fazer um exemplo ainda mais extremo da falha e, em seguida, usando o photoshop / paint para corrigi-la, você poderá encontrar inspiração para uma solução.
Deseja dobrar? Sobrepor com a borda? Puxe até que não se sobreponha?
fonte