Graphics. Draw Pie Метод
Пространство имен: System.Drawing Сборка: System.Drawing.Common.dll Сборка: System.Drawing.dll Пакет: System.Drawing.Common v6.0.0 Пакет: System.Drawing.Common v7.0.0 Пакет: System.Drawing.Common v8.0.0
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Рисует сектор, определяемый эллипсом, который задан парой координат, шириной, высотой и двумя радиальными линиями.
Перегрузки
Рисует сектор, который определяется эллипсом, заданным структурой Rectangle и двумя радиальными линиями.
Рисует сектор, который определяется эллипсом, заданным структурой RectangleF и двумя радиальными линиями.
Рисует сектор, определяемый эллипсом, который задан парой координат, шириной, высотой и двумя радиальными линиями.
Рисует сектор, определяемый эллипсом, который задан парой координат, шириной, высотой и двумя радиальными линиями.
DrawPie(Pen, Rectangle, Single, Single)
Рисует сектор, который определяется эллипсом, заданным структурой Rectangle и двумя радиальными линиями.
public: void DrawPie(System::Drawing::Pen ^ pen, System::Drawing::Rectangle rect, float startAngle, float sweepAngle);
public void DrawPie (System.Drawing.Pen pen, System.Drawing.Rectangle rect, float startAngle, float sweepAngle);
member this.DrawPie : System.Drawing.Pen * System.Drawing.Rectangle * single * single -> unit
Public Sub DrawPie (pen As Pen, rect As Rectangle, startAngle As Single, sweepAngle As Single)
Параметры
Объект Pen, определяющий цвет, ширину и стиль сектора.
Структура Rectangle, представляющая ограничивающий прямоугольник, определяющий эллипс, частью которого является данный сектор.
startAngle Single
Угол (в градусах), который измеряется по часовой стрелке, начиная от оси X и заканчивая первой стороной сектора.
sweepAngle Single
Угол (в градусах), который измеряется по часовой стрелке, начиная от значения параметра startAngle и заканчивая второй стороной сектора.
Исключения
pen имеет значение null .
Примеры
Следующий пример кода предназначен для использования с Windows Forms и требует PaintEventArgs e , который является параметром обработчика Paint событий. Код выполняет следующие действия.
- Создает черную ручку.
- Создает прямоугольник, ограничивающий полный эллипс.
- Определяет углы, с которых начинается рисование (относительно оси X) и по которым выполняется рисование (оба в направлении по часовой стрелке).
- Рисует сегмент круговой диаграммы на экране.
public: void DrawPieRectangle( PaintEventArgs^ e ) < // Create pen. Pen^ blackPen = gcnew Pen( Color::Black,3.0f ); // Create rectangle for ellipse. Rectangle rect = Rectangle(0,0,200,100); // Create start and sweep angles. float startAngle = 0.0F; float sweepAngle = 45.0F; // Draw pie to screen. e->Graphics->DrawPie( blackPen, rect, startAngle, sweepAngle ); >
public void DrawPieRectangle(PaintEventArgs e) < // Create pen. Pen blackPen = new Pen(Color.Black, 3); // Create rectangle for ellipse. Rectangle rect = new Rectangle(0, 0, 200, 100); // Create start and sweep angles. float startAngle = 0.0F; float sweepAngle = 45.0F; // Draw pie to screen. e.Graphics.DrawPie(blackPen, rect, startAngle, sweepAngle); >
Public Sub DrawPieRectangle(ByVal e As PaintEventArgs) ' Create pen. Dim blackPen As New Pen(Color.Black, 3) ' Create rectangle for ellipse. Dim rect As New Rectangle(0, 0, 200, 100) ' Create start and sweep angles. Dim startAngle As Single = 0.0F Dim sweepAngle As Single = 45.0F ' Draw pie to screen. e.Graphics.DrawPie(blackPen, rect, startAngle, sweepAngle) End Sub
Комментарии
Этот метод рисует фигуру круговой диаграммы, определяемую дугой эллипса, и двумя радиальными линиями, пересекающимися с конечными точками дуги. Эллипс определяется ограничивающим прямоугольником. Круговая фигура состоит из двух радиальных линий, определенных параметрами startAngle и sweepAngle , и дуги между пересечениями этих радиальных линий с эллипсией.
sweepAngle Если параметр больше 360 градусов или меньше –360 градусов, он обрабатывается как 360 градусов или -360 градусов соответственно.
Применяется к
DrawPie(Pen, RectangleF, Single, Single)
Рисует сектор, который определяется эллипсом, заданным структурой RectangleF и двумя радиальными линиями.
public: void DrawPie(System::Drawing::Pen ^ pen, System::Drawing::RectangleF rect, float startAngle, float sweepAngle);
public void DrawPie (System.Drawing.Pen pen, System.Drawing.RectangleF rect, float startAngle, float sweepAngle);
member this.DrawPie : System.Drawing.Pen * System.Drawing.RectangleF * single * single -> unit
Public Sub DrawPie (pen As Pen, rect As RectangleF, startAngle As Single, sweepAngle As Single)
Параметры
Объект Pen, определяющий цвет, ширину и стиль сектора.
Структура RectangleF, представляющая ограничивающий прямоугольник, определяющий эллипс, частью которого является данный сектор.
startAngle Single
Угол (в градусах), который измеряется по часовой стрелке, начиная от оси X и заканчивая первой стороной сектора.
sweepAngle Single
Угол (в градусах), который измеряется по часовой стрелке, начиная от значения параметра startAngle и заканчивая второй стороной сектора.
Исключения
pen имеет значение null .
Примеры
Следующий пример кода предназначен для использования с Windows Forms и требует PaintEventArgs e , который является параметром обработчика Paint событий. Код выполняет следующие действия.
- Создает черную ручку.
- Создает прямоугольник, ограничивающий полный эллипс.
- Определяет углы, с которых начинается рисование (относительно оси X) и по которым выполняется рисование (оба в направлении по часовой стрелке).
- Рисует сегмент круговой диаграммы на экране.
public: void DrawPieRectangleF( PaintEventArgs^ e ) < // Create pen. Pen^ blackPen = gcnew Pen( Color::Black,3.0f ); // Create rectangle for ellipse. RectangleF rect = RectangleF(0.0F,0.0F,200.0F,100.0F); // Create start and sweep angles. float startAngle = 0.0F; float sweepAngle = 45.0F; // Draw pie to screen. e->Graphics->DrawPie( blackPen, rect, startAngle, sweepAngle ); >
public void DrawPieRectangleF(PaintEventArgs e) < // Create pen. Pen blackPen = new Pen(Color.Black, 3); // Create rectangle for ellipse. RectangleF rect = new RectangleF(0.0F, 0.0F, 200.0F, 100.0F); // Create start and sweep angles. float startAngle = 0.0F; float sweepAngle = 45.0F; // Draw pie to screen. e.Graphics.DrawPie(blackPen, rect, startAngle, sweepAngle); >
Public Sub DrawPieRectangleF(ByVal e As PaintEventArgs) ' Create pen. Dim blackPen As New Pen(Color.Black, 3) ' Create rectangle for ellipse. Dim rect As New RectangleF(0.0F, 0.0F, 200.0F, 100.0F) ' Create start and sweep angles. Dim startAngle As Single = 0.0F Dim sweepAngle As Single = 45.0F ' Draw pie to screen. e.Graphics.DrawPie(blackPen, rect, startAngle, sweepAngle) End Sub
Комментарии
Этот метод рисует фигуру круговой диаграммы, определяемую дугой эллипса, и двумя радиальными линиями, пересекающимися с конечными точками дуги. Эллипс определяется ограничивающим прямоугольником. Круговая фигура состоит из двух радиальных линий, определенных параметрами startAngle и sweepAngle , и дуги между пересечениями этих радиальных линий с эллипсией.
sweepAngle Если параметр больше 360 градусов или меньше –360 градусов, он обрабатывается как 360 градусов или -360 градусов соответственно.
Применяется к
DrawPie(Pen, Int32, Int32, Int32, Int32, Int32, Int32)
Рисует сектор, определяемый эллипсом, который задан парой координат, шириной, высотой и двумя радиальными линиями.
public: void DrawPie(System::Drawing::Pen ^ pen, int x, int y, int width, int height, int startAngle, int sweepAngle);
public void DrawPie (System.Drawing.Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle);
member this.DrawPie : System.Drawing.Pen * int * int * int * int * int * int -> unit
Public Sub DrawPie (pen As Pen, x As Integer, y As Integer, width As Integer, height As Integer, startAngle As Integer, sweepAngle As Integer)
Параметры
Объект Pen, определяющий цвет, ширину и стиль сектора.
Координата X верхнего левого угла ограничивающего прямоугольника, определяющего эллипс, частью которого является сектор.
Координата Y верхнего левого угла ограничивающего прямоугольника, определяющего эллипс, частью которого является сектор.
Ширина ограничивающего прямоугольника, определяющего эллипс, частью которого является данный сектор.
Высота ограничивающего прямоугольника, определяющего эллипс, частью которого является данный сектор.
startAngle Int32
Угол (в градусах), который измеряется по часовой стрелке, начиная от оси X и заканчивая первой стороной сектора.
sweepAngle Int32
Угол (в градусах), который измеряется по часовой стрелке, начиная от значения параметра startAngle и заканчивая второй стороной сектора.
Исключения
pen имеет значение null .
Примеры
Следующий пример кода предназначен для использования с Windows Forms и требует PaintEventArgs e , который является параметром обработчика Paint событий. Код выполняет следующие действия.
- Создает черную ручку.
- Создает положение и размер прямоугольника, ограничивающего полный эллипс.
- Определяет углы, с которых начинается рисование (относительно оси X) и по которым выполняется рисование (оба в направлении по часовой стрелке).
- Рисует фигуру круговой диаграммы на экране.
public: void DrawPieInt( PaintEventArgs^ e ) < // Create pen. Pen^ blackPen = gcnew Pen( Color::Black,3.0f ); // Create location and size of ellipse. int x = 0; int y = 0; int width = 200; int height = 100; // Create start and sweep angles. int startAngle = 0; int sweepAngle = 45; // Draw pie to screen. e->Graphics->DrawPie( blackPen, x, y, width, height, startAngle, sweepAngle ); >
public void DrawPieInt(PaintEventArgs e) < // Create pen. Pen blackPen = new Pen(Color.Black, 3); // Create location and size of ellipse. int x = 0; int y = 0; int width = 200; int height = 100; // Create start and sweep angles. int startAngle = 0; int sweepAngle = 45; // Draw pie to screen. e.Graphics.DrawPie(blackPen, x, y, width, height, startAngle, sweepAngle); >
Public Sub DrawPieInt(ByVal e As PaintEventArgs) ' Create pen. Dim blackPen As New Pen(Color.Black, 3) ' Create location and size of ellipse. Dim x As Integer = 0 Dim y As Integer = 0 Dim width As Integer = 200 Dim height As Integer = 100 ' Create start and sweep angles. Dim startAngle As Integer = 0 Dim sweepAngle As Integer = 45 ' Draw pie to screen. e.Graphics.DrawPie(blackPen, x, y, width, height, _ startAngle, sweepAngle) End Sub
Комментарии
Этот метод рисует фигуру круговой диаграммы, определяемую дугой эллипса, и двумя радиальными линиями, пересекающимися с конечными точками дуги. Эллипс определяется ограничивающим прямоугольником, описанным параметрами x , y , width и height . Круговая фигура состоит из двух радиальных линий, определенных параметрами startAngle и sweepAngle , и дуги между пересечениями этих радиальных линий с эллипсией.
sweepAngle Если параметр больше 360 градусов или меньше –360 градусов, он обрабатывается как 360 градусов или -360 градусов соответственно.
Применяется к
DrawPie(Pen, Single, Single, Single, Single, Single, Single)
Рисует сектор, определяемый эллипсом, который задан парой координат, шириной, высотой и двумя радиальными линиями.
public: void DrawPie(System::Drawing::Pen ^ pen, float x, float y, float width, float height, float startAngle, float sweepAngle);
public void DrawPie (System.Drawing.Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle);
member this.DrawPie : System.Drawing.Pen * single * single * single * single * single * single -> unit
Public Sub DrawPie (pen As Pen, x As Single, y As Single, width As Single, height As Single, startAngle As Single, sweepAngle As Single)
Параметры
Объект Pen, определяющий цвет, ширину и стиль сектора.
Координата X верхнего левого угла ограничивающего прямоугольника, определяющего эллипс, частью которого является сектор.
Координата Y верхнего левого угла ограничивающего прямоугольника, определяющего эллипс, частью которого является сектор.
Ширина ограничивающего прямоугольника, определяющего эллипс, частью которого является данный сектор.
Высота ограничивающего прямоугольника, определяющего эллипс, частью которого является данный сектор.
startAngle Single
Угол (в градусах), который измеряется по часовой стрелке, начиная от оси X и заканчивая первой стороной сектора.
sweepAngle Single
Угол (в градусах), который измеряется по часовой стрелке, начиная от значения параметра startAngle и заканчивая второй стороной сектора.
Исключения
pen имеет значение null .
Примеры
Следующий пример кода предназначен для использования с Windows Forms и требует PaintEventArgs e , который является параметром обработчика Paint событий. Код выполняет следующие действия.
- Создает черную ручку.
- Создает положение и размер прямоугольника, ограничивающего полный эллипс.
- Определяет углы, с которых начинается рисование (относительно оси X) и по которым выполняется рисование (оба в направлении по часовой стрелке).
- Рисует сегмент круговой диаграммы на экране.
public: void DrawPieFloat( PaintEventArgs^ e ) < // Create pen. Pen^ blackPen = gcnew Pen( Color::Black,3.0f ); // Create location and size of ellipse. float x = 0.0F; float y = 0.0F; float width = 200.0F; float height = 100.0F; // Create start and sweep angles. float startAngle = 0.0F; float sweepAngle = 45.0F; // Draw pie to screen. e->Graphics->DrawPie( blackPen, x, y, width, height, startAngle, sweepAngle ); >
public void DrawPieFloat(PaintEventArgs e) < // Create pen. Pen blackPen = new Pen(Color.Black, 3); // Create location and size of ellipse. float x = 0.0F; float y = 0.0F; float width = 200.0F; float height = 100.0F; // Create start and sweep angles. float startAngle = 0.0F; float sweepAngle = 45.0F; // Draw pie to screen. e.Graphics.DrawPie(blackPen, x, y, width, height, startAngle, sweepAngle); >
Public Sub DrawPieFloat(ByVal e As PaintEventArgs) ' Create pen. Dim blackPen As New Pen(Color.Black, 3) ' Create location and size of ellipse. Dim x As Single = 0.0F Dim y As Single = 0.0F Dim width As Single = 200.0F Dim height As Single = 100.0F ' Create start and sweep angles. Dim startAngle As Single = 0.0F Dim sweepAngle As Single = 45.0F ' Draw pie to screen. e.Graphics.DrawPie(blackPen, x, y, width, height, _ startAngle, sweepAngle) End Sub
Комментарии
Этот метод рисует фигуру круговой диаграммы, определяемую дугой эллипса, и двумя радиальными линиями, пересекающимися с конечными точками дуги. Эллипс определяется ограничивающим прямоугольником, описанным параметрами x , y , width и height . Круговая фигура состоит из двух радиальных линий, определенных параметрами startAngle и sweepAngle , и дуги между пересечениями этих радиальных линий с эллипсией.
sweepAngle Если параметр больше 360 градусов или меньше –360 градусов, он обрабатывается как 360 градусов или -360 градусов соответственно.
рисование круга по точкам
В общем виде уравнение окружности имеет вид
(x-a)^2 + (y-b)^2 = R^2
a и b — абсцисса и ордината центра окружности, R — радиус окружности.
Вырази у через х, подставь координаты центра и изменяй в цикле значение x. Для каждого значения х получаешь два значения у, то есть рисуешь сразу две точки.
11 июля 2006 года
668 / / 30.03.2005
точка O(x;x)?? Будем считать, что (x;y)
Я точно не уверено, но, кажется, это в полярных координатах:
n:=-pi/1000;
repeat
n:=n+pi/1000;
x1:=r*cos(n);
y1:=r*sin(n);
putpixel(x+x1,y+y1,15);
until n>=2*pi;
18 июля 2006 года
96 / / 11.10.2004
[QUOTE=int]точка O(x;x)?? Будем считать, что (x;y)
Я точно не уверено, но, кажется, это в полярных координатах:
n:=-pi/1000;
repeat
n:=n+pi/1000;
x1:=r*cos(n);
y1:=r*sin(n);
putpixel(x+x1,y+y1,15);
until n>=2*pi;[/QUOTE]
если бы окружность, линия, эллипс рисовались бы таким способом, никаких мощностей видеокарт не хватило бы даже на дряхленький HL2. Спасибо Брезенхему за его чудо алгоритм.
26 июля 2006 года
668 / / 30.03.2005
Так по-моему и вопрос был не по опенглу?
И когда это HL2 стал дряхленьким? У меня на бывгем 450-м целероне GF2 mx200 на минимуме кое-как шевелился. Вот кто дряхлый, так это wolf3d, однако, как там что на экран выводится, сказать не могу
28 июля 2006 года
96 / / 11.10.2004
я это к тому, что люди хотят сделать ‘как попало’, а не ‘как следует’
01 августа 2006 года
619 / / 12.09.2005
просто dn както странно определяется (pi/1000). обычно оно определялось как полный_оборот/длину_окружности. после преобразований dn := 1/r
01 августа 2006 года
619 / / 12.09.2005
var
x,y,r,n,dn: real;
x1,y1: Integer;
begin
x := 100;
y := 100;
r := 50;
dn := 1/r;
n:=0;
while n < 2*pi do begin
x1 := Round(x + r*cos(n));
y1 := Round(y + r*sin(n));
PutPixel(x1, y1, 15);
n := n + dn;
end;
end;
23 августа 2006 года
4 / / 08.06.2006
Господа, окружность — вещь симметричная, следовательно, если точка с координатаим (x, y) лежит на окружности, то точки с координатами (x, -y), (-x, y) и (-x, -y) тоже лежат на зтой окружности, а отседова вытекает, что надо считать от 0 до pi/2.
23 августа 2006 года
198 / / 31.01.2003
[QUOTE=sysprg]Господа, окружность — вещь симметричная, следовательно, если точка с координатаим (x, y) лежит на окружности, то точки с координатами (x, -y), (-x, y) и (-x, -y) тоже лежат на зтой окружности, а отседова вытекает, что надо считать от 0 до pi/2.[/QUOTE]
А если не привязываться сразу к координатам центра окружности (X,Y), то можно и от 0 до pi/4, при этом меняя x с y.
05 сентября 2006 года
212 / / 05.04.2005
Так речь идет о круге или все же об окружности?
24 сентября 2006 года
31 / / 30.04.2005
А можно заглянуть, ну, хотя бы в «Язык Си для профессионалов» Г. Шилда и взять офигенный алгоритм рисования окружности (он даже носит имя чьё-то) без напряга мат. сопроцессора и вызова функций типа putpixel(), заменяя последние прямым доступом к видеопамяти. Получится быстро и профессионально.
ТОлько вот зачем рисовать окружность самому? Есть готовые функции в соответствующих библиотеках.
Рисование кривой или окружности
Excel для Microsoft 365 Word для Microsoft 365 Outlook для Microsoft 365 PowerPoint для Microsoft 365 Классический клиент Project Online Excel 2021 Word 2021 Outlook 2021 PowerPoint 2021 Project профессиональный 2021 Project стандартный 2021 Excel 2019 Word 2019 Outlook 2019 PowerPoint 2019 Project профессиональный 2019 Project стандартный 2019 Excel 2016 Word 2016 Outlook 2016 PowerPoint 2016 Project профессиональный 2016 Project стандартный 2016 Excel 2013 Word 2013 Outlook 2013 PowerPoint 2013 Project профессиональный 2013 Project стандартный 2013 Excel 2010 Word 2010 Outlook 2010 PowerPoint 2010 Еще. Меньше
В этой статье рассмотрены кривые рисунки, круги и овалы. Сведения о рисовании линий см. в этой ссылке. Сведения о фигурах с бесплатной формой и их редактировании см. в этой статьи.
Рисование кривой
- На вкладке Вставка нажмите кнопку Фигуры.
- В разделе Линии щелкните элемент Кривая.
- Щелкните место, где необходимо начать кривую, перетащите указатель для рисования кривой, а затем щелкните в место, где необходимо добавить кривую.
- Чтобы завершить рисование фигуры, выполните одно из следующих действий:
- Чтобы оставить фигуру незамкнутой, дважды щелкните в любой момент рисования.
- Чтобы замкнуть фигуру, щелкните вблизи ее начальной точки.
Нарисуйте овал или круг
- На вкладке Вставка нажмите кнопку Фигуры.
- В разделе Основные фигуры щелкните Овал.
- Щелкните в том месте, где должен начинаться овал, и перетащите его, чтобы нарисовать фигуру.
- Чтобы нарисовать круг, при перетаскиваниях нажмите shift.
- Вы можете изменить внешний вид круга или кривой, добавив заливу или эффект фигуры илиизменив границу.
- Если вы хотите получить более сложную схему, например перекрывающиеся круги, организационную диаграмму или блок-схему, можно создать графический элемент SmartArt, а не рисовать каждую фигуру вручную.
- Круги и овалы заполняются автоматически. Если вы не хотите, чтобы фигура скрывает что-то под ней, например текст или ячейки, выйдите фигуру, а затем на вкладке Формат нажмите кнопку Заливка фигуры ивыберите нет заливки.
Рисование кривой
- На вкладке Вставка в группе Иллюстрации нажмите кнопку Фигуры.
- В области Линиищелкните Кривая .
- Щелкните место, где необходимо начать кривую, перетащите указатель для рисования кривой, а затем щелкните в место, где необходимо добавить кривую.
- Чтобы завершить рисование фигуры, выполните одно из следующих действий:
- Чтобы оставить фигуру незамкнутой, дважды щелкните в любой момент рисования.
- Чтобы замкнуть фигуру, щелкните вблизи ее начальной точки.
Примечание: К замкнутой фигуре по умолчанию применяется заливка. Чтобы она не скрывала находящиеся под ней ячейки, выберите фигуру, а затем в разделе Средства рисования на вкладке Формат в группе Стили фигур щелкните Заливка фигуры и выберите значение Нет заливки.
Нарисуйте овал или круг

- На вкладке Вставка в группе элементов Иллюстрации нажмите кнопку Фигуры.
- В области Основные фигурыщелкните Овал .
- Щелкните в том месте, откуда следует начать круг. Чтобы получить круг, удерживайте нажатой клавишу SHIFT при перетаскивании указателя.
- Вы можете изменить внешний вид круга или кривой, добавив заливку или эффект либо настроив границы.
- Если вы хотите получить более сложную схему, например перекрывающиеся круги, организационную диаграмму или блок-схему, можно создать графический элемент SmartArt, а не рисовать каждую фигуру вручную.
- К кругу или овалу по умолчанию применяется заливка. Чтобы она не скрывала находящиеся под ней ячейки, выберите фигуру, а затем в разделе Средства рисования на вкладке Формат в группе Стили фигур щелкните Заливка фигуры и выберите значение Нет заливки.
Как нарисовать круг на с++?
Здравствуйте. Нужно нарисовать круг в простом консольном проекте под ubuntu. Использую gcc. Погуглил, для решения такой задачи везде используют то windows.h то graphics.h, а вот gcc на это ругается. Подскажите пожалуйста как возможно решить эту проблему.
- Вопрос задан более трёх лет назад
- 18152 просмотра
Комментировать
Решения вопроса 0
Ответы на вопрос 6
Вот — простой способ:
#include #include // compile: // gcc -Wall -Wextra -Werror -lglut -lGL -lm -std=gnu99 -D_GNU_SOURCE opengl.c -o openglcircle #define _U_ __attribute__((__unused__)) // exit by ctrl+q or escape void keyPressed(unsigned char key, _U_ int x, _U_ int y) < int mod = glutGetModifiers(); // window = glutGetWindow() if(mod == GLUT_ACTIVE_CTRL && key == 'q') exit(0); else if(key == 27) exit(0); >void DrawCircle(float cx, float cy, float r, int num_segments) < float theta = 2. * M_PI / (float)num_segments; float c, s, t, x = r, y = 0.; sincosf(theta, &s, &c); glBegin(GL_LINE_LOOP); for(int ii = 0; ii < num_segments; ii++)< glVertex2f(x + cx, y + cy); t = x; x = c * x - s * y; y = s * t + c * y; >glEnd(); > void display() < glClear(GL_COLOR_BUFFER_BIT); DrawCircle(0.,0.,0.5,100); glFlush(); >int main(int argc, char** argv)
А, извиняюсь, про С++ не заметил. Ну да ладно, все равно я С++ не знаю и знать не хочу!
P.S. А вот — чистая консолька:
#include #include #include char *drawCircle(int R, int geom) < if(R >200 || R < 1) return NULL; int S, i, Y = 2 * R + 2; if(geom) S = Y * (R + 1); else S = Y * (Y - 1); char *buf = malloc(S+1); if(!buf) return NULL; memset(buf, ' ', S); buf[S] = 0; for(i = Y-1; i < S; i+=Y) buf[i] = '\n'; inline void DrawPixel(int x, int y)< if(geom)< if(y%2==0) buf[Y * y/2 + x] = '*'; >else < buf[Y * y + x] = '*'; >> // Bresenham's circle algorithm int x = R; int y = 0; int radiusError = 1-x; while(x >= y)< DrawPixel(x + R, y + R); DrawPixel(y + R, x + R); DrawPixel(-x + R, y + R); DrawPixel(-y + R, x + R); DrawPixel(-x + R, -y + R); DrawPixel(-y + R, -x + R); DrawPixel(x + R, -y + R); DrawPixel(y + R, -x + R); y++; if (radiusError < 0)< radiusError += 2 * y + 1; >else < x--; radiusError += 2 * (y - x) + 1; >> return buf; > int main(int argc, char **argv) < int i, R; char *buf; for(i = 1; i < argc; i++)< if(!(buf = drawCircle(R = atoi(argv[i]), 1)))< printf("Wrong parameter %s\n", argv[i]); continue; >printf("\nCircle with R = %d:\n%s\n", R, buf); free(buf); buf = NULL; > return 0; >
Алгоритм Брезенхэма, второй аргумент функции drawCircle задает поправку на геометрию терминала: если у вас вдруг в терминале высота буквы равна ширине, то пишите 0, если же высота в 2 раза больше ширины, пишите 1.
