C++ для начинающих Рисование окружности алгоритм Брезенхайма
==============
#include <graphics.h>
#include <iostream.h>
//Окружность по алгоритму Брезенхайма
void Circle (int x , int y , int r ,unsigned char color )
<
int x1 , y1 , yk = 0 ;
int sigma , delta , f ;
x1 = 0 ;
y1 = r ;
delta = 2 *( 1 – r );
do
<
putpixel ( x + x1 , y + y1 , color );
putpixel ( x – x1 , y + y1 , color );
putpixel ( x + x1 , y – y1 , color );
putpixel ( x – x1 , y – y1 , color );
f = 0 ;
if ( y1 < yk )
break;
if ( delta < 0 )
<
sigma = 2 *( delta + y1 )- 1 ;
if ( sigma <= 0 )
<
x1 ++;
delta += 2 * x1 + 1 ;
f = 1 ;
>
>
else
if ( delta > 0 )
<
sigma = 2 *( delta – x1 )- 1 ;
if ( sigma > 0 )
<
y1 –;
delta += 1 – 2 * y1 ;
f = 1 ;
>
>
if (! f )
<
x1 ++;
y1 –;
delta += 2 *( x1 – y1 – 1 );
>
>
while( 1 );
>
void main ()
<
int R = 100 ; //Задаем радиус
double x ;
double y ;
int gdriver = DETECT , gm ;
initgraph (& gdriver ,& gm , “” );
x = getmaxx ()/ 2 ;
y = getmaxy ()/ 2 ;
Circle ( x , y , R , 1 );
cin . get ();
>
==============
Самую нужную часть хорошо комментировать я не смогу. Но кое что поясню. В отличии от встроенной функции, описываемая здесь называется по другому. Различны регистры букв. К регистру стоит быть всегда внимательным. Кроме этого, тут проявился некоторый эффект, который немного противоречит правилам хорошего тона программирования. Я заранее знаю какие значения должен принимать центр окружности и, размышляя логически, могу инициализировать x,y сразу в момент объявления, но при попытке такой инициализации и дальнейшей работы, у меня программа срабатывала не так как я того ожидал. Во время инициализации графического режима эти x,y меняли свое значение и вся инициализация во время объявления теряла смысл.Поэтому присваивание им значений я выполнил непосредственно перед вызовом функции. Это слегка забавно, но это стоит расценивать только как: “Будьте внимательны”.
Как нарисовать круг на с++?
А, извиняюсь, про С++ не заметил. Ну да ладно, все равно я С++ не знаю и знать не хочу!
P.S. А вот — чистая консолька:
Алгоритм Брезенхэма, второй аргумент функции drawCircle задает поправку на геометрию терминала: если у вас вдруг в терминале высота буквы равна ширине, то пишите 0, если же высота в 2 раза больше ширины, пишите 1.
- Вконтакте
- Вконтакте

- Вконтакте
Это вообще откуда и зачем?
- Вконтакте
- Вконтакте
- Вконтакте
И где она тут? Не вижу ничего, кроме вычислений.
Хотя сама постановка вопроса это жуть какая-то.
Если это кто-то задания такие даёт студентам — передайте «коллегам», чтобы не маялись дурью, заставляя выполнять дебильные задания, не дающие ровным счётом никаких полезных знаний и навыков. Я понимаю, если бы такое задание дали для выполнения на METAPOST и т.п. (правда для METAPOST оно слишком уж простое), но C++. Дебилизм.
Как в c задать окружность
А, извиняюсь, про С++ не заметил. Ну да ладно, все равно я С++ не знаю и знать не хочу!
P.S. А вот — чистая консолька:
Алгоритм Брезенхэма, второй аргумент функции drawCircle задает поправку на геометрию терминала: если у вас вдруг в терминале высота буквы равна ширине, то пишите 0, если же высота в 2 раза больше ширины, пишите 1.


Это вообще откуда и зачем?
Алгоритм отрисовки круга примерно такой:
И где она тут? Не вижу ничего, кроме вычислений.
Хотя сама постановка вопроса это жуть какая-то.
Если это кто-то задания такие даёт студентам — передайте «коллегам», чтобы не маялись дурью, заставляя выполнять дебильные задания, не дающие ровным счётом никаких полезных знаний и навыков. Я понимаю, если бы такое задание дали для выполнения на METAPOST и т.п. (правда для METAPOST оно слишком уж простое), но C++. Дебилизм.
Создание простых геометрических фигур в 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 вершин — восьмиугольник (октагон).
Ниже приведен полный код матрицы программы, которая наглядно покажет создание данных фигур:
Нарисуйте круг в C графике
Заголовочный файл graphics.h содержит функцию circle (), которая рисует окружность с центром в точке (x, y) и заданным радиусом.
Создание простых геометрических фигур в C++/SFML

Ты всю жизнь ощущал, что мир не в порядке. Странная мысль, но её не отогнать. Она — как заноза в мозгу. Она сводит с ума, не дает покоя. Это и привело тебя ко мне… Примешь синюю таблетку — и сказке конец. Ты проснешься в своей постели и поверишь, что это был сон. Примешь красную таблетку — войдешь в страну чудес. Я покажу тебе, насколько глубока библиотека 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 вершин — восьмиугольник (октагон).
Ниже приведен полный код матрицы программы, которая наглядно покажет создание данных фигур: