Создание эффекта "внутреннего удара" из полигона - PullRequest
2 голосов
/ 25 июня 2009

Я рисую целую связку Полигонов на холсте, большинство из которых имеют общий край хотя бы с одним другим Полигоном. Я хотел бы указать, что многоугольник является «особенным», выделяя его, однако из-за перекрывающихся краев штрих на многоугольнике имеет тенденцию быть частично затянутым другим многоугольником, в результате чего штрих в некоторых местах выглядит тоньше, чем должен. Кроме того, в зависимости от порядка прорисовки, у многоугольника его ход может быть почти полностью покрыт окружающими. Разнесение полигонов не очень привлекательный вариант, поскольку видимые промежутки между полигонами гораздо менее предпочтительны для этой проблемы «тонкого штриха».

Я полагаю, что эффект, который я ищу, может быть достигнут, генерируя каждый Полигон как пару Полигонов вместо этого так, чтобы один Полигон полностью содержался в другом, и этот меньший Удар Полигона доходит (но не перекрывается) ) инсульт внешнего полигона. Внутренний полигон будет всегда иметь прозрачное заполнение и непрозрачный штрих только тогда, когда я хочу указать, что теперь пара полигонов «особенная».

Мой вопрос сводится к; как я могу вывести такой внутренний многоугольник из внешнего или потерпеть неудачу, как иначе я мог бы достичь этого эффекта?

Рассматриваемый многоугольник может быть ограничен правильными многоугольниками , если необходимо, и штрихи - это простые сплошные линии 1 толщины без каких-либо причудливых митров или тому подобного. Я хотел бы иметь возможность регулировать толщину обводки в какой-то момент, но ничего более необычного, чем это.

1 Ответ

1 голос
/ 25 июня 2009

Я думаю, что на самом деле есть несколько способов достичь того, чего вы хотите.

Во-первых, следуя исходной идее рисования второго, немного меньшего многоугольника внутри исходного многоугольника; это не плохая идея. Чтобы ответить на ваш первоначальный вопрос о том, как создать меньший многоугольник: вы можете найти центроид каждого многоугольника и сместить каждую вершину на процент от расстояния до этой точки центроида многоугольника, чтобы получить меньший многоугольник. Это должно дать приятный эффект.

Другим способом, которым вы могли бы воспользоваться, было бы использование z-порядка и смещение «более толстого» многоугольника небольшим отрицательным z-расстоянием.

Еще один способ - использовать порядок прорисовки; нарисуйте свои более толстые многоугольники в последнюю очередь, что предотвратит их переброску окружающими многоугольниками.

Еще одна идея, которая может работать в зависимости от ваших потребностей, может заключаться не в том, чтобы рисовать многоугольники, а в том, чтобы рисовать серии линий, просто утолщая некоторые из линий.

Есть много вариантов, которые вы можете попробовать; надеюсь, вы найдете тот, который работает хорошо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...