Я новичок в C ++ и задаю практический вопрос.
Что я сделал:
Однако это меня ничем не привлекает. 🙁
Решение
Приведенный ниже код представляет собой простой способ рисования круга без использования причудливых функций для перехода к любой произвольно выбранной позиции x или y.
Если вам нужен более сложный код, вы работаете на платформе Windows и используете Visual Studio для создания программ, то приведенный ниже код будет интересен.
Он использует такие функции, как SetConsoleCursorPosition() установить x а также y позиции, SetConsoleTextAttribute() установить цвета. Код рисует линии, пиксели, прямоугольники и круги в текстовом окне консоли.
Другие решения
Вы не можете рисовать в произвольных местах с cout — это для линейного вывода на консоль. (Конечно, вы можете нарисовать круг за линией, если это то, что вы хотите)
Вы могли бы использовать Ncurses для консольного рисования.
Если вы хотите иметь возможность рисовать на «холсте» при произвольных привязках, то есть много библиотек, которые вы можете использовать для этого — например, SFML , SDL а также Qt и многое другое.
Узоры окружности
Графические узоры на си
Рассмотрим программу для рисования узоров на си. Программа будет рисовать узор из концентрических окружностей
Концентрические окружности это набор окружностей, которые имеют общий центр и различный радиус(возможно разный цвет).
Для того чтобы составлять различные узоры из концентрических окружностей необходимо написать процедуру рисования концентрических окружностей с заданным центром. При написании программы полезными будут уроки Графика в Си. и Процедуры и функции в Си.
В процедуре рисования концентрических окружностей будут следующие входные параметры
x – координата x центра окружностей
y- координата y центра окружностей
k – количество окружностей
r- изменение радиуса
Чтобы нарисовать концентрические окружности используется цикл for. Переменная цикла будет задавать текущий номер окружности.Чтобы нарисовать окружность в Си использучется оператор circle(x,y,radius)
#include
#include
#include
// узор из концентрических окружностей центр узора x и y.k -количество окружностей. r — изменение радиуса
void uzor(int x, int y, int k, int r)
<
int i; // перменная цикла
int color; // перменная для цвета окружности
int radius; // радиус окружности
// пробегаемся по всем окружностям
for (i=1; i
В дальнейшем в программе мы можем вызывать данную процедуру несколько раз, меняя ее входные параметры.
Пример полного решения графический узор на си
#include
#include
#include
// узор из концентрических окружностей центр узора x и y . k количество окружностей. r изменение радиуса
void uzor(int x, int y, int k, int r)
<
int i; // переменная цикла
int color; // переменная для цвета окружности
int radius; // радиус окружности
// пробегаемся по всем окружностям
for (i=1; i
На заметку:
1. Чтобы создать собственную процедуру в си используем
void имя процедуры (список параметров через запятую)
<
>
Задания для самостоятельной работы:
1. Попробуйте, используя программу нарисовать картину из 4 узоров в виде креста.
2. Поменяйте узор концентрических окружностей, так, чтобы можно было задавать смещение центра окружностей
по осям x и y. Для этого в процедуре uzor необходимо добавить два параметра dx и dy смещение.
При этом координаты каждой последующей окружности будут увеличиваться xc=xc+dx yc=yc+dy
Пример решения графической программы на си для рисования узоров концентрическими окружностями
#include
#include
#include
// узор из концентрических окружностей центр узора x и y .
//k -количество окружностей . r — изменение радиуса
//dx — смещение центра окружностей по оси x
//dy — смещение центра окружностей по оис y
void uzor(int x, int y, int k, int r, int dx, int dy)
<
int i;
int color;// цвет окружности
int radius;// радиус окружности
int xc, yc;// координаты центра окружности
xc=x;
yc=y;
// пробегаем все окружности их k
for (i=1; i
main()
<
initwindow(400, 400);
uzor (100,200,5, 20, 5, 0);
uzor (200,200,5, 20, -5, 0);
uzor (150,150,5, 20, 0, 5);
uzor (150,250,5, 20, 0, -5);
getch();
closegraph();
>
Окружность в цикле for

Цикл – многократное выполнение последовательности команд программы.
B QBasic цикл выглядит следующим образом:
Где I – переменная-счетчик (от нее зависит, сколько раз будет выполнен цикл), переменная, которая изменяется от начального значения до конечного с каждой итерацией.
Рассмотрим несколько примеров использования цикла при рисовании в QBasic
Нарисовать рамочку из окружностей. (7х7). Радиус окружности равен 30.
Шаг 1. Верхняя граница рамочки. Расчет координат
Нам нужно изменять координаты центра в цикле, чтобы получить набор из 7 окружностей, расположенных так, как показано на рисунке. Рассмотрим:
Расстояние между центрами двух соседних окружностей равно 60 (радиус первой окружности плюс радиус второй окружности). Значит координаты
1 окружности – (50, 50)
2 окружности – (110, 50)
3 окружности – (170, 50)
4 окружности – (230, 50) и т.д.
Таким образом, команда CIRCLE в цикле должна выглядеть следующим образом:
CIRCLE(50+60*i, 50), 30
Значение переменной I изменяется от 0 до 6. Тем самым, мы получим требуемые координаты центров окружностей.
Левая окружность будет иметь координаты центра (50, 50), а правая – (410, 50). Смотри рисунок:
CIRCLE (50+60*i, 50), 30
Шаг 2. Левая граница рамочки. Расчет координат
Определение формулы координат аналогично рассмотренному выше. Отличие в том, что изменение происходят по оси Y. Т.е.:
Верхняя окружность будет иметь координаты (50, 50), а нижняя (50, 50+60*6) или (50, 410). Смотри рисунок ниже:
CIRCLE (50 + 60 * i, 50), 30
CIRCLE (50, 50 + 60 * i), 30
Шаг 3. Правая и нижняя граница.
Аналогично рассуждая, легко записать формулы, определяющие координаты центров окружностей левой и нижней стороны нашей рамочки
CIRCLE (50 + 60 * i, 410), 30 — нижняя сторона рамочки
CIRCLE (410, 50 + 60 * i), 30 — правая сторона рамочки
SCREEN 12
FOR i = 0 TO 6
CIRCLE (50 + 60 * i, 50), 30
CIRCLE (50, 50 + 60 * i), 30
CIRCLE (50 + 60 * i, 410), 30
CIRCLE (410, 50 + 60 * i), 30
NEXT i
Задание для самостоятельного выполнения.
Нарисуйте узор. Рекомендуется не использовать вложенный цикл. Цель – не научить языку программирования, а научиться мыслить и делать выводы.







