Алгоритм линии Брезенхема (толщина) - PullRequest
3 голосов
/ 15 сентября 2009

Мне было интересно, знал ли кто-нибудь о каком-либо алгоритме рисования линии определенной толщины, основанном на алгоритме линии Брезенхэма или подобном.

Подумав еще раз, мне было интересно, для каждого setPixel (x, y) я просто нарисую круг, например ::100100

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

Может быть, я мог бы как-то нарисовать полукруги в зависимости от угла?

Любой вклад будет оценен.

Спасибо.

дубликат: как создать линию произвольной толщины с помощью Брезенхэма?

Ответы [ 3 ]

3 голосов
/ 15 сентября 2009

Вы не можете рисовать круги вдоль линии. Этот подход запатентован . :) Вы все еще можете прочитать патент на вдохновение.

2 голосов
/ 15 сентября 2009

Существуют вариации в Bresenhams, которые рассчитывают покрытие в пикселях, например, используемые в библиотеках anti-grain geometry ; хотите ли вы что-то такого качества - вы не говорите, что такое выходной носитель, и большинство систем, более способных, чем LCDS, в любом случае поддерживают толщину ручек.

2 голосов
/ 15 сентября 2009

Я не знаю, что обычно используется, но мне кажется, что вы могли бы использовать Bresenham для линии шириной в 1 пиксель, но расширить ее на определенное количество пикселей по вертикали или горизонтали. Например, предположим, что ваша линия примерно на 30 градусов от горизонтали, и вы хотите, чтобы она была шириной в четыре пикселя. Вы рассчитываете, что вертикальная толщина линии должна составлять пять пикселей. Вы запускаете Bresenham, но для каждого пикселя (x, y) вы фактически рисуете (x, y), (x, y + 1), ... (x, y + 4). А если вы хотите, чтобы концы линии были закруглены, на каждом конце нарисуйте круг.

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

...