В графическом режиме в Си можно отображать на экране различные фигуры, строить изображения, реализовывать анимацию и компьютерные игры.
Чтобы работать в графическом режиме в Си, необходимо перейти в графический режим, инициализировав графическое окно си initwindow ( ширина окна, высота окна ); в котором и будут рисоваться изображения. После завершения работы с графикой, необходимо выйти из графического режима с помощью команды closegraph();
Структура программы с графикой в Си.
#include // подключение заголовочного файла с графическими функциями
#include
main()
<
initwindow ( 500, 500 ); // инициализировали и открыли окно размером 500 на 500
…рисуем графические объекты
getch(); // ждем нажатия клавиши
closegraph(); // закрываем графический режим
>
Основные графические объекты в си, такие как точка, линия, окружность, прямоугольник задаются с помощью системы координат. Система координат в графическом режиме Си задается следующим образом. Верхний левый угол экрана имеет координату x=0 и y=0.
Координата X задается слева направо. Т.е. чем больше X, тем правее точка.
Координата Y задается сверху вниз. Т.е. чем больше Y, тем ниже точка.
Максимальные X это ширина окна. Максимальное Y это высота окна.
Задание цвета изображения в Си
Чтобы задать цвет изображаемого объекта, используется оператор setcolor(номер цвета);
Таблица цветов в Си.
0 черный
1 синий
2 зеленый
3 морской волны
4 красный
5 фиолетовый
6 коричневый
7 светло-серый
8 темно-серый
9 светло-синий
10 светло-зеленый
11 светлый морской волны
12 светло-красный
13 светло-фиолетовый
13 светло-фиолетовый
14 желтый
15 белый
setcolor(4) ;// устанавливаем красный цвет
Отображение точки в Си.
Для рисования точки в графических программах си используется оператор
putpixel (x, y, номер цвета );
x, y – координаты точки
номер цвета – цвет, которым будет отображена точка
Отображение линии в Си
Для рисования отрезка в графических программах си используется оператор
x1, y1 – координаты одного конца отрезка
x2, y2 – координаты другого конца отрезка
Отображение окружности в Си
Для рисования окружности в графических программах си используется оператор
x, y – координаты центра окружности
r- радиус окружности
Пример. Отображение окружности белого цвета с центром 100, 100 и радиусом 20.
setcolor(15);// устанавливаем цвет рисования 15 — белый
circle(100,100, 20);// рисуем окружность с центром 100, 100 и радиусом 20
Отображение прямоугольника в Си.
Для рисования прямоугольной рамки в графических программах си используется оператор.
rectangle (x1, y1, x2, y2);
x1, y1 – координаты верхнего левого угла прямоугольника
x2, y2 – координаты нижнего правого угла прямоугольника
Чтобы задать цвет рамки необходимо предварительно установить цвет рисования с помощью оператора setcolor(номер цвета);
Для отображения закрашенного прямоугольника в Си используются два оператора.
setfillstyle ( 1, номер цвета );
bar (x1, y1, x2, y2);
x1, y1 – координаты верхнего левого угла прямоугольника
x2, y2 – координаты нижнего правого угла прямоугольника
Закрашивание ограниченной области в Си.
Чтобы закрасить определенным цветом целую ограниченную область в графической программе си используются два оператора.
setfillstyle (1, цвет закраски );
floodfill (x, y, цвет границы области);
x, y – координаты внутри области
цвет закраски – цвет , которым будет закрашиваться область
цвет границы области – цвет границы закрашиваемой области
Пример закрашенного кругав графических программах си
setcolor(15);// устанавливаем цвет рисования 15 — белый
circle(100,100, 20);// рисуем окружность с центром 100, 100 и радиусом 20
setfillstyle ( 1, 15 ); // устанавливаем цвет заполнения круга белый -15
floodfill (100, 100, 15); // заполняем окружность, указывая точку внутри ее – центр
Пример графической программы на си
Пример программы 17 графическая программа на си рисует автомобиль.
#include
#include
main()
<
initwindow(500, 500);// инициализируем графическое окно
// рисуем кузов
setfillstyle (1,4 ); // устанавливаем вид заливки 1 -полный, цвет заливки 4 — красный
bar(100, 150, 200, 170);// закрашенный прямоугольник нижняя часть кузова
bar(120, 150, 170, 130);// закрашенный прямоугольник верхняя часть кузова
// рисуем колеса
setcolor(15); // устанавливаем цвет колеса
circle(120, 170, 10); // левое колесо окружность ниже кузова
circle(170, 170, 10); // правое колесо окружность ниже кузова
setfillstyle (1,8); // устанавливаем вид заливки полный — 1 цвет серый — 8
floodfill(120,170,15); // закрашиваем круг левого колеса до границы круга цветом 15
floodfill(170,170,15); // закрашиваем круг левого колеса до границы круга цветом 15
getch(); // ждем нажатия кнопки
closegraph(); // выход из графического режима
>
Вернуться к содержанию 
КАК ваще можно рисовать на этом «ужасном» языке?
Вопрос: КАК и что мы будем рисовать?
Когда-то, давным-давно, когда дебри ДОСа простирались от края и до края, программисты были самыми несчастными людьми. Им приходилось программировать графику под ДОС. Эта операционная система, ветхая, как и сами компьютеры, не реализует ничего, кроме работы с файлами, да и то на довольно низком уровне. Толку от неё практически никакого не было, и с графикой приходилось работать напрямую, используя 10-ый вектор прерывания. О прерываниях в следующем разделе, а пока скажем лишь, что работу с регистрами скрыли от нас всевозможные графические библиотеки. В компании Borland тоже сделали одну. Теперь она часть языка СИ, того, что для ДОС. Так уж повелось, что Паскаль, скажем, всегда рассматривается комплексно, с графикой. В СИ — язык отдельно, графика отдельно. Есть книги по языку, есть книги по графике. Разделяй и властвуй!
Работа с графикой осложняется тем, что надо подключать специальный EGA/VGA-драйвер, разработнный Borland для инициализации и работы с графическим режимом видеоплаты. Для этого надо этим файлом располагать. И конечно же, в ОС Windows этот драйвер не поддерживается. Куда деваться? использовать старый добрый Borland C++ 3.0 (3.1). Там и драйвер есть в папке BGI и поддерживает она его. Но для работы вашей программы с графикой, придётся комплектовать её файлом EGAVGA.BGI. Его целесообразно размещать в той же папке, что и программа или в подпапке, чтобы случайно не стёрли. Также надо разрешить компилятору работать с графикой. Выставьте флажок в меню: options->linker->libraries->Graphic library. Убеждаю вас, что ни Visual C++, ни Borland C++ 5.0 к низкоуровневой графике вас и близко не подпустят. Освоив эту графику, вы без труда освоите графику под Windows, когда мы с нею столкнёмся. Принципиальных отличий нет, если не считать некоторых изменений в именах функций и того, что эти функции могут быть членами класса (Visual C++). Главное — понять концепцию.
Вопрос: КАК перейти в графический режим?
Самый распространённый способ — использовать функцию initgraph, которая задаёт и режим и резрешение и указывает путь к EGAVGA.BGI. Рассмотрим её синтаксис:
initgraph(*int far grdriver, *int far grmode, char *path);
Первый аргумент указывает тип видеоадаптера. Он принимает числовое значение:
Аргумент grdriver:
Создание простых геометрических фигур в C++/SFML
Обновл. 22 Фев 2021 |
Ты всю жизнь ощущал, что мир не в порядке. Странная мысль, но её не отогнать. Она — как заноза в мозгу. Она сводит с ума, не дает покоя. Это и привело тебя ко мне… Примешь синюю таблетку — и сказке конец. Ты проснешься в своей постели и поверишь, что это был сон. Примешь красную таблетку — войдешь в страну чудес. Я покажу тебе, насколько глубока библиотека SFML кроличья нора.
Круги
Предлагаю для начала потренироваться на простых геометрических фигурах типа Михаила круга. В этом деле большую помощь нам окажет класс CircleShape:
конструктор данного класса принимает в качестве параметра радиус нашей будущей фигуры (например, circle(50.f) );
закрасить фигуру можно с помощью метода setFillColor() , который очень похож на уже знакомый нам метод window.clear() ;
ну и для отображения круга в окне используется метод window.draw() .
Результат выполнения программы:
Наша фигура может иметь контур. Для его создания используется метод setOutlineThickness(), а для цвета контура — setOutlineColor():
Результат выполнения программы:
Как уже знаем из предыдущего урока, при закрашивании фигур или фона можно еще указать значение прозрачности. Например, строкой setOutlineColor(Color(80, 220, 50, 150)) мы устанавливаем 150 в качестве значения прозрачности контура:
А теперь с помощью строки setOutlineColor(Color(80, 220, 50, 50)) мы установим 50 в качестве значения прозрачности контура:
Вы уже наверняка заметили, что наш круг выходит за границы окна, а это не совсем хорошо. Нужно его немного подвинуть, а поможет нам в этом метод move():
Результат выполнения программы:
Регулярные полигоны
-Welcome to the real world!
Отлично! Сейчас мы рассмотрим, как нарисовать и другие фигуры. Теперь ты готов узнать истину. Она заключается в том, что, на самом деле, ложки не существует, Нео твой круг — это немножко не круг, а многоугольник. Да-да, самый обычный многоугольник с большИм количеством вершин. Всё дело в том, что у конструктора класса CircleShape есть еще и второй параметр (помимо радиуса), который отвечает за количество вершин у создаваемой фигуры, и он по умолчанию равен 30 . Именно при значениях близких к 30, многоугольник становится мало отличимым от круга. В то же время, задавая этот параметр самостоятельно, мы можем получить абсолютно другие геометрические элементы. Не трудно догадаться, что 3 вершины — это треугольник, 4 вершины — квадрат, 5 вершин — пятиугольник, ну а 8 вершин — восьмиугольник (октагон).
Ниже приведен полный код матрицы программы, которая наглядно покажет создание данных фигур:








