В моем коде есть несколько объектов Spline2D, каждый из которых имеет метод Position, Velocity и Acceleration, который возвращает вектор указанного количества в определенный момент времени. Я использовал эти векторы для построения геометрии для создания градиентных штрихов для кривых, но у меня проблемы с самопересечением на крутых кривых. Как пример, вот одна кривая, где у меня это происходит:
Каркас: http://twitpic.com/2zplw1/full
Заполнено: http://twitpic.com/2zpmnt/full
Как вы можете видеть, на втором изгибе внутренняя часть пересекает себя, что вызывает этот уродливый артефакт. Есть ли хороший алгоритм / метод для обводки кривых, не вызывая такого самопересечения?
РЕДАКТИРОВАТЬ : более крайние примеры, а также макет того, что я хотел бы достичь:
Каркас: http://twitpic.com/2ztwzi/full
Заполнено: http://twitpic.com/2ztwkt/full
Идеальный результат (Макет): http://twitpic.com/2ztxa8/full
Ответы:
Если вы визуализируете их с помощью графического процессора и любого современного трехмерного API (например, OpenGL / D3D), мне кажется, что вы можете избавиться от этого с помощью глубинного тестирования. Если вы назначите свои внешние вершины z = FAR, а ваши внутренние вершины - z = NEAR, тестирование глубины должно предотвратить показ перекрытия. С OpenGL:
Будьте бдительны: это не сработает, если вам нужны полупрозрачные штрихи.
источник
«Исправление» будет зависеть от того, как вы хотите, чтобы результирующий вывод был похож. Проблема на самом деле не была достаточно хорошо определена: как это должно выглядеть?
Я предлагаю вам сначала попробовать сделать еще более экстремальный пример глюк, а затем с помощью Photoshop / краска, чтобы исправить это вы можете найти вдохновение для решения.
Вы хотите, чтобы это сложилось? Перекрываются с краем? Потяните, пока он не перекрывается?
источник