С++. Рисование прямой линии

Те, кто ещё совсем не успел познакомиться с компьютерной графикой, может первое время казаться необычным, что центр координат — это левый верхний угол экрана, а направление по оси y — это книзу, а не кверху, не как в школе у рисуемых графиков. Но так принято. Т. е. какая-нибудь координата [50; 70] — это 50 вправо и 70 вниз.
Линия — это узкая полоса, черта, проведённая на какой-либо поверхности от одной точки к другой (например, отрезок), либо от точки в бесконечность (луч, линия гиперболы и др.). В двумерной компьютерной растровой графике под линиями подразумевают черту от точки до точки. Это означает, что чтобы нарисовать линию, нужно задать обязательные координаты двух точек. Любая точка на плоскости — это значение по оси X и значение по оси Y. Поэтому, чтобы начертить линию, необходимо 4 значения.

Я точно не могу сказать, что это за DETECT, которым инициализируется переменная grdriver, но будем считать, что это так мы инициализируем драйвер (во всяком случае, так говорит сама строка кода). После инициализации драйвера мы запускаем графический режим, после чего используем функцию рисования линии. Функция принимая четыре точки и показывает нам линию на экране.
При работе в dosbox есть один нюанс: чтобы окно не закрывалось преждевременно, нужно как-то делать задержку. Я для задержки использую cin.get(). Если задержку сделать после прекращения работы графического режима, то на экране ничего не будет. Надо задержку делать во время работы графического режима, не потом.
Нарисовать-то нарисовали, но обычно люди проверяют код на возможное возникновение ошибок, поэтому добавим проверку. Проверку нужно запускать, разумеется, сразу после входа в графический режим:

Линиям можно задавать цвет. А у экрана можно узнавать границы. Нарисуем диагональ экрана пунктирной линией зелёного цвета. Вообще пункти́р — это прерывистая линия, состоящая из близко расположенных точек. Иногда пунктиром также называют линии, состоящие из штрихов или сочетаний точек и штрихов, что технически неверно, так как для таких линий есть свои названия. Поэтому не думайте, что моя пунктирная линия, это штрих-точка.

Задавать цвет надо с помощью констант (как у меня в коде), либо с помощью чисел, но надо помнить, что мы можем использовать только 16 цветов, поэтому использовать числа кроме [0…15] не имеет смысла, но если не знаете название, можете написать какой-нибудь цикл и подсмотреть по числам цвета.
Задание стиля линии требует себе выбор стиля (DOTTED_LINE — это константа, она же — целое число, которым выбирается пунктирная линия). Структура linesettingstype определена в graphics.h следующим образом:


Для line_style этой структуры можно использовать следующие константы:
SOLID_LINE — 0 — сплошная
DOTTED_LINE — 1 — пунктир
CENTER_LINE — 2 — штрихпунктир
DASHED_LINE — 3 — штриховая
USERBIT_LINE — 4 — тип линии, заданный пользователем
thickness определяет, будут ли последующие линии тонкими или толстыми.
NORM_WIDTH 1 — толщина в 1 пиксель
THICK_WIDTH 3 — толщина в 3 пикселя
upattern — это 16-битный шаблон, который используется только когда linestyle равен USERBIT_LINE (4). В этом случае каждый бит в шаблоне, установленный в 1, соответствует пикселю на линии в текущем цвете. Например, сплошной линии соответствует upattern, равный 0xFFFF (рисуются все пикселы), а пунктиру соответствует upattern, равный 0x3333 или 0x0F0F. Если же параметр linestyle в setlynestyle не равен USERBIT_LINE (!=4), то upattern поддерживается, но игнорируется.

  • Параметр linestyle не работает при построении дуг, кругов, эллипсов и секторов. В этом случае используется параметр thickness.

2 комментария на «“С++. Рисование прямой линии”»

  1. Аноним:

  2. Аноним:

    😯 😯 😕 😕 😎 😆 💡 💡 😥 😥 🙄

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/duglas-krokford/javascript-silnye-storony/?lfrom=15589587
Яндекс.Метрика