Я думаю, что лучший способ - нарисовать прямоугольник, а не линию, поскольку линия с шириной - это двумерный объект. Попытка нарисовать набор параллельных линий, чтобы избежать перерисовки (чтобы уменьшить пропускную способность записи) и перерисовки (отсутствующие пиксели), была бы довольно сложной. Нетрудно вычислить угловые точки прямоугольника из начальной и конечной точек и ширины.
Итак, следуя комментарию ниже, процесс для этого будет: -
Примечание *: Если вы используете OpenGL, вы также можете выполнить Шаг 2 одновременно. Конечно, использование OpenGL действительно означает понимание OpenGL (большого и сложного), и это приложение может сделать это сложной задачей для реализации на столь позднем этапе разработки.
Вот статья и реализация Delphi модифицированной версии алгоритма Брезенхема для рисования утолщенных линий.
Возможно, вы также захотите взглянуть на Anti-Grain Geometry , библиотеку для высококачественного и высокопроизводительного программного рендеринга 2D-графики. Взгляните на демонстрационную страницу , чтобы понять, на что она способна.
Некоторые простые маршруты для использования:
Самый простой способ создать линию почти произвольной толщины - это сначала сделать брезенхем, а затем применить столько дилатационных итераций, сколько вы пожелаете. Каждое расширение расширяет обе стороны вашей линии в равной степени, но используя разные маски, вы можете добиться как равномерной, так и неравномерной толщины.
РЕДАКТИРОВАТЬ : Стоит также отметить, что этот метод имеет приятную особенность, заключающуюся в том, что его легко обобщить в 3D, потому что и Брезенхем, и дилатация легко обобщаются в 3D.
Толщина 1:
Маска:
1 1 1
1 1 1
1 1 1
Итоговая толщина: 3
Маска:
0 1 0
1 1 1
0 1 0
Итоговая толщина: 2
Я предполагаю, что вы будете рисовать горизонтальные промежутки от одной ограничивающей линии до другой и вычислять значение x каждой из линий методом Брезенхема по ходу движения (в одном цикле).
Не пробовал.
Конечные точки могут потребовать некоторого внимания, чтобы они не выглядели странно обрезанными.