Как нарисовать круг в консоли c
Перейти к содержимому

Как нарисовать круг в консоли c

  • автор:

как в console Нарисовать круг c# Введите радиус круга: [закрыт]

Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 6 лет назад .
как в console Нарисовать круг c# «Enter radius of circle» == «Введите радиус круга»
Отслеживать
задан 16 апр 2017 в 7:01
25 1 1 серебряный знак 5 5 бронзовых знаков
через Теорема Pitagoras
16 апр 2017 в 7:09

Покажите, как вы пробовали. Вам нужно понять в чем вы допускаете ошибку, если я сейчас Вам напишу готовое решение, то в чём прок.

16 апр 2017 в 7:13
Возможный дубликат вопроса: Как построить эллипс в консоли?
17 апр 2017 в 0:11

Консоль и красивая графика — две несовместимые вещи. Если вас устраивает круг из спец. символов, разве что.

17 апр 2017 в 4:31

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

static void Main(string[] args)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp00 < class Program < static void Main() < Console.Clear(); Random rd = new Random(); double r; do < Console.Write("Enter radius of circle : "); if (!double.TryParse(Console.ReadLine(), out r) || r > while (r else if (input == "y") < fill = true; >> while (input != "y" && input != "n"); Console.WriteLine(); double r_in = r - 0.4; double r_out = r + 0.4; for (double y = r; y >= -r; --y) < for (double x = -r; x < r_out; x += 0.5) < Console.ForegroundColor = (ConsoleColor)rd.Next(16); double value = x * x + y * y; if (value >= r_in * r_in && value else if (fill && value < r_in * r_in && value < r_out * r_out) < Console.Write("."); >else < Console.Write(" "); >> Console.WriteLine(); > Console.ReadKey(); > > > 

Нарисовать круг в консоли

Как нарисовать простой круг
Как работать с графикой на Си? Заголовочный файл graphics.h подключить не удаётся. Какими.

Нарисовать на экране круг зеленого цвета, который движется по горизонтали
"Нарисовать на экране круг зеленого цвета, который движется по горизонтали, при достижении границы.

Как нарисовать таблицу в консоли?
Доброго времени суток. Можно ли в C на скорую руку реализовать таблицу (чтобы при запуске символы.

Как можно нарисовать ровный круг в консоли?
Всем привет! Делаю проект на 1 курсе. Для начала нужно понять, как нарисовать в консоли круг или.

1778 / 756 / 153
Регистрация: 03.06.2009
Сообщений: 5,894

https://ru.wikipedia.org/wiki/. 0%BC%D0%B0
Нарисовать можно звездочками, но из-за прямоугольных пропорций символов получится эллипс.

Регистрация: 20.10.2014
Сообщений: 392
а при помощи можно?

Эксперт функциональных языков программированияЭксперт Python

36829 / 19877 / 4166
Регистрация: 12.02.2012
Сообщений: 33,013
Записей в блоге: 13

ЦитатаСообщение от yura0103 Посмотреть сообщение

а при помощи можно?
— не думаю. Только в DOS-е
Регистрация: 20.10.2014
Сообщений: 392

Мне нужно нарисовать несколько геометрических фигур разного цвета и в методичке указана эта библиотека

Эксперт функциональных языков программированияЭксперт Python

36829 / 19877 / 4166
Регистрация: 12.02.2012
Сообщений: 33,013
Записей в блоге: 13

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
#include #include #include #define RED RGB(255,0,0) int main(int argc, char *argv[]) { HWND hWnd = GetForegroundWindow(); COORD P = {0}; RECT pRECT= {0}; GetClientRect(hWnd,&pRECT); HPEN RPEN = CreatePen(PS_SOLID, 2, RED); HDC hDC = GetWindowDC(hWnd); SetBkMode(hDC,TRANSPARENT); P.X=100; P.Y=100; EXTLOGPEN pINFO; GetObject(RPEN,sizeof(EXTLOGPEN),&pINFO); SelectObject(hDC,RPEN); Ellipse ( hDC, P.X - 30, P.Y + 30, P.X + 30, P.Y - 30 ); system("PAUSE"); return 0; }

447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916

Catstail, Может быть имелось ввиду создать графическое окно и нарисовать в нем круг
По теме, если все же рисовать нужно в графическом окне то :

1 2 3 4
int x = 100, y = 100, r = 50; initwindows(800,600); setcolor(1); circle(x,y,r);

Ну с увереностью сказать не могу библиотеки нет, но как то так, ну или можно написать функцию рисования круга, если это имелось ввиду :

1 2 3 4 5 6 7 8 9
void circle(int x0, int y0, int R) { for(float angle = 0; angle  6.4; angle += 0.01) { int x = R * cosf(angle); int y = R * sinf(angle); drawDot(x + x0, y + y0); } }

Где функция drawDot просто рисует точку по координатам.
Можно еще воспользоваться алгоритмом Брезенхема для рисования окружности, если будет желание почитайте

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
void simpoints(int x0, int y0, int x, int y) { drawDot(x0 + x, y0 + y); drawDot(x0 - x, y0 + y); drawDot(x0 + x, y0 - y); drawDot(x0 - x, y0 - y); drawDot(x0 + y, y0 + x); drawDot(x0 - y, y0 + x); drawDot(x0 + y, y0 - x); drawDot(x0 - y, y0 - x); } void DrawCircle(int x0, int y0, int R) { int x = 0, y = R; int d = 3 - 2 * R; do { simpoints(x0, y0, x, y); if (d  0) { d = d + 4 * x + 6; x = x + 1; } else { if (d >= 0) { d = d + 4 * (x - y) + 10; x++; y--; } } } while (x  R/sqrt(2.0)); }

Как нарисовать круг на с++?

Здравствуйте. Нужно нарисовать круг в простом консольном проекте под ubuntu. Использую gcc. Погуглил, для решения такой задачи везде используют то windows.h то graphics.h, а вот gcc на это ругается. Подскажите пожалуйста как возможно решить эту проблему.

  • Вопрос задан более трёх лет назад
  • 18068 просмотров

Комментировать
Решения вопроса 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.

Re: как нарисовать окружность в консоли (Иксов нет вообще) на Си.

Теоретически для этого можно воспользоваться библиотеками svgalib или libgl, но по опыту скажу, что работа с ними у меня восторга не вызвала.

Murr ★★
( 09.08.03 17:54:00 MSD )

Re: как нарисовать окружность в консоли (Иксов нет вообще) на Си.

можно в текстовом виде — считай, что у тебя экран 80×25 пискелей 🙂

grustnoe ★★
( 09.08.03 19:03:04 MSD )

Re: как нарисовать окружность в консоли (Иксов нет вообще) на Си.

а если прямую запись в видеопамять? Ведь полно всяких flame-эффектиков, 4-килобайтных.

anonymous
( 09.08.03 23:45:11 MSD )

Re: как нарисовать окружность в консоли (Иксов нет вообще) на Си.

Хрен ты что запишешь в память пока ты не рут. Да и вообще — ядро на такие штучки просто обязано обижаться.

Llama ★
( 10.08.03 14:49:43 MSD )

Re: как нарисовать окружность в консоли (Иксов нет вообще) на Си.

#include #include #include #include #include typedef unsigned char u8; typedef unsigned short u16; typedef unsigned long u32; #define FBIOGET_VSCREENINFO 0x4600 #define FBIOGET_FSCREENINFO 0x4602 struct fb_fix_screeninfo < char id[16]; unsigned long smem_start; u32 smem_len; u32 type; u32 type_aux; u32 visual; u16 xpanstep; u16 ypanstep; u16 ywrapstep; u32 line_length; unsigned long mmio_start; u32 mmio_len; u32 accel; u16 reserved[3]; >; struct fb_bitfield < u32 offset; /* beginning of bitfield */ u32 length; /* length of bitfield */ u32 msb_right; /* != 0 : Most significant bit is */ /* right */ >; struct fb_var_screeninfo < u32 xres; /* visible resolution */ u32 yres; u32 xres_virtual; /* virtual resolution */ u32 yres_virtual; u32 xoffset; /* offset from virtual to visible */ u32 yoffset; /* resolution */ u32 bits_per_pixel; /* guess what */ u32 grayscale; /* != 0 Graylevels instead of colors */ struct fb_bitfield red; /* bitfield in fb mem if true color, */ struct fb_bitfield green; /* else only length is significant */ struct fb_bitfield blue; struct fb_bitfield transp; /* transparency */ u32 nonstd; /* != 0 Non standard pixel format */ u32 activate; /* see FB_ACTIVATE_* */ u32 height; /* height of picture in mm */ u32 width; /* width of picture in mm */ u32 accel_flags; /* acceleration flags (hints) */ /* Timing: All values in pixclocks, except pixclock (of course) */ u32 pixclock; /* pixel clock in ps (pico seconds) */ u32 left_margin; /* time from sync to picture */ u32 right_margin; /* time from picture to sync */ u32 upper_margin; /* time from sync to picture */ u32 lower_margin; u32 hsync_len; /* length of horizontal sync */ u32 vsync_len; /* length of vertical sync */ u32 sync; /* see FB_SYNC_* */ u32 vmode; /* see FB_VMODE_* */ u32 reserved[6]; /* Reserved for future compatibility */ >; static inline void set_bit (char * b, int bit, _Bool set) < if (set) b[bit/8] |= 1static void putpixel (char * frame_buffer, int x, int y, int color, struct fb_var_screeninfo var, struct fb_fix_screeninfo fix) < long bit; int i; bit = (x+y*var.xres)*var.bits_per_pixel; for (i=0; imain () < int fd = open ("/dev/fb0", O_RDWR); char * vbuf; int i, rc; struct fb_var_screeninfo var; struct fb_fix_screeninfo fix; if (fd == -1) < fprintf (stderr, "failed to open fb device!\n"); return 0; >rc = ioctl (fd, FBIOGET_VSCREENINFO, &var); if (rc == -1) < fprintf (stderr, "failed to get var_screeninfo!\n"); return 0; >rc = ioctl (fd, FBIOGET_FSCREENINFO, &fix); if (rc == -1) < fprintf (stderr, "failed to get var_screeninfo!\n"); return 0; >vbuf = mmap (NULL, fix.mmio_len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if (vbuf == MAP_FAILED) < fprintf (stderr, "failed to mmap fb mem!\n"); return 0; >for (i=0; i
Murr ★★
( 10.08.03 15:48:40 MSD )

Re: как нарисовать окружность в консоли (Иксов нет вообще) на Си.

Только надо понять как корректно проэкспортировать фреймбуферные объявления (те, что написал я, годятся для 2.4.20), ну и плюс на не фреймбуферной консоли нужно еще перейти во фреймбуфер. 😀

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

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