Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/56: Рейтинг темы: голосов - 56, средняя оценка - 4.84
-2 / 1 / 1
Регистрация: 06.06.2013
Сообщений: 65

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

06.06.2013, 13:13. Показов 12169. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно нарисовать круг в классе чтоб можна било в консоле задавать его 1)цвет 2)радиус 3) и угол на которий я захочю его повернуть!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.06.2013, 13:13
Ответы с готовыми решениями:

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

Нарисовать круг через цикл
Народ, салют. У меня уже бошка кипит, не могу никак поймать "озарение". Нужно нарисать круг при помощи цикла "for" ну или...

Нарисовать круг C++ (для чайников)
Добрый день! Я, вообще, новичок в программировании, в том числе и на C ++. Я использую CodeBlocks+MinGW. Мне нужно нарисовать круг.... В...

42
-2 / 1 / 1
Регистрация: 06.06.2013
Сообщений: 65
12.06.2013, 21:10  [ТС]
Студворк — интернет-сервис помощи студентам
Croessmah, да ладно необижайся я просто немогу тебе правельно обяснить вот и пытаюсь!) так что сможеш сделать?
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
13.06.2013, 12:29
unikalen, примере Вы привели пример класса с использованием форм.Раз у Вас такие познания,вот и примените их к Вашей задаче
P.S. Командная строка не может использоваться в качестве графического интерфейса.Можно попробовать чтобы программа рисовала окружность из звёздочек,об этом сказано в примере,приведённом мной выше. В среде программирования на Visual Basic Pascal используется интерфейс ПОХОЖИЙ на командную строку.И,если не ошибаюсь,этот язык и Delphi призваны для использования командной для графических целей.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
13.06.2013, 15:24
Цитата Сообщение от unikalen Посмотреть сообщение
сделай мне тогда програму которая будет рисовать круг и чтоб в консоле можна било задавать радиус и несколько цветов! а так-же перемещать по екранне его
____Безумие порождает еще большее безумие
C++
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <iostream.h>
#include <math.h>
#include <conio.h>
 
 
class MadRound
{
private :
        int a, b, R; // Координаты центра и радиус
        int Color;
 
        int **matrix;
        int mx, my;
 
public :
        MadRound(int R);
        ~MadRound();
 
        void Drow();
        int Wait();
};
MadRound::MadRound(int R_)
: a(20), b(20)
{
R = R_;
cout << "Choose your madness color scheme:\n1, 2, 3 : ";
/*  0 = Черный 8 = Серый
    1 = Синий 9 = Светло-синий
    2 = Зеленый A = Светло-зеленый
    3 = Голубой B = Светло-голубой
    4 = Красный C = Светло-красный
    5 = Лиловый D = Светло-лиловый
    6 = Желтый E = Светло-желтый
    7 = Белый F = Ярко-белый */
cin >> Color;
 
system("cls");
 
switch(Color)
  {
  case 1 : system("color 0C"); break;
  case 2 : system("color 56"); break;
  case 3 : system("color 70"); break;
  deefault : system("color 01"); break;
  }
 
 
mx=a*2+1, my=b*2+1;
matrix = new int*[mx];
for(int i=0; i<mx; i++)
  matrix[i] = new int [my];
 
}
 
MadRound::~MadRound()
{
for(int i = 0; i < mx; ++i)
  delete [] matrix[i];
delete [] matrix;
}
 
void MadRound::Drow()
{
system("cls");
 
for(int x=0; x<mx; x++)
  for(int y=0; y<my; y++)
    {
    if( (pow((x-a),2) + pow((y-b),2)) <= pow(R,2) ) //(x-a)^2 + (y-b)^2 <= R^2 Формула круга
      matrix[x][y]=1;
    else
      matrix[x][y]=0;
    }
 
for(int x=0; x<mx; x++)
  {
  for(int y=0; y<my; y++)
    {
    cout << matrix[x][y] << ""; // Вывод на экран
    }
  cout << endl;
  }
}
 
int MadRound::Wait()
{
 
int g = getch();
 
 
switch(g)
  {
  case 75 : if(b>0) b--; break; //Лево
  case 72 : if(a>0) a--; break; //Верх
  case 77 : if(b<my) b++; break; //Право
  case 80 : if(a<mx) a++; break; //Низ
  case 27 : break;
  default : g = 13;
  }
return g;
}
 
int main()     
{
int R;
cout << "R=";
cin >> R;
 
MadRound *MR = new MadRound(R);
MR->Drow();
 
int g;
while(g!=27)
  {
  g = MR->Wait();
  MR->Drow();
  }
 
return 0;
}
0
-2 / 1 / 1
Регистрация: 06.06.2013
Сообщений: 65
16.06.2013, 00:34  [ТС]
SatanaXIII, pow почему у меня ошибку выбивает? я не знаю как ее исправить?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.06.2013, 03:55
unikalen, давайте угадаю ваш компиль. VS? Приз в студию!
Приведите основание к типу double
static_cast<double>(тут основание)
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
17.06.2013, 11:35
Цитата Сообщение от unikalen Посмотреть сообщение
pow почему у меня ошибку выбивает? я не знаю как ее исправить?
Есть старое народное средство исцеления pow(..., 2):
запись вида
C++
1
if( (pow((x-a),2) + pow((y-b),2)) <= pow(R,2) )
превращается в
C++
1
if( (x-a)*(x-a) + (y-b)*(y-b) <= R*R )
0
-2 / 1 / 1
Регистрация: 06.06.2013
Сообщений: 65
17.06.2013, 21:45  [ТС]
SatanaXIII, да ну это не круг а какоето чудо) и не перемещаеца)
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
18.06.2013, 08:58
Цитата Сообщение от unikalen Посмотреть сообщение
и не перемещаеца)
А вот с такой функцией ожидания?
C++
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
#include <windows.h>
#include <stdio.h>
int MadRound::Wait()
{
 
int g = 13;
getch();
 
        if(GetAsyncKeyState(VK_LEFT)) // (c)Юра X)))
        {
            keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
            if(b>0) b--;
            g = 75;
        }
        if(GetAsyncKeyState(VK_RIGHT))
        {
            keybd_event(VK_RIGHT, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
            if(b<my) b++;
            g = 77;
        }
        if(GetAsyncKeyState(VK_UP))
        {
            keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
            if(a>0) a--;
            g = 72;
        }
        if(GetAsyncKeyState(VK_DOWN))
        {
            keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
            if(a<mx) a++;
            g = 80;
        }
        if(GetAsyncKeyState(VK_ESCAPE))
        {
        g = 27;
        }
return g;
}
Цитата Сообщение от unikalen Посмотреть сообщение
да ну это не круг а какоето чудо)
Увольте, почему?! Это же не окружность. Это круг - множество единичек на плоскости, ограниченных окружностью с заданным радиусом!
И полностью удовлетворяет заданию:
Цитата Сообщение от unikalen Посмотреть сообщение
сделай мне тогда програму которая будет рисовать круг и чтоб в консоле можна било задавать радиус и несколько цветов! а так-же перемещать по екранне его
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
18.06.2013, 12:29
Цитата Сообщение от SatanaXIII Посмотреть сообщение
int g;
Можно проинициализировать (хотя бы 0),чтобы компилятор об это предупреждение не спотыкался.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
getch();
Может,лучше _getch(); ?
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.06.2013, 18:22
unikalen, вам человек просто чудо техники написал, а вам еще и не нравится...
0
-2 / 1 / 1
Регистрация: 06.06.2013
Сообщений: 65
18.06.2013, 18:29  [ТС]
Wolkodav, чудо техники?)))) поверь он можэт и намного лутше!! и мне нада намного лутше!!
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.06.2013, 18:32
unikalen, а почему он вам должен помогать? Он вам помог, допилите дальше сами...
0
18.06.2013, 18:32

Не по теме:

Цитата Сообщение от unikalen Посмотреть сообщение
поверь он можэт и намного лутше!
Он то может, вопрос когда сами учиться будете :)

0
-2 / 1 / 1
Регистрация: 06.06.2013
Сообщений: 65
18.06.2013, 18:47  [ТС]
Croessmah, будем!я ище только первый курс!) очень мало понимаю вот с помощю вас очень много ногого узнаю! Но мне реально совсе не то нужно что он написал! Мне чтото похожое на твой код токо в тебя без пременения класов и у тебя не круг а элипс какойто. Если у тебя есть жэлание сделай все как я прошу! спс!

Добавлено через 11 минут
SatanaXIII, А как его перемещать?
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
18.06.2013, 20:15
Лучший ответ Сообщение было отмечено как решение

Решение

CTRL - изменение цвета окружности
ALT - изменение цвета внутренностей круга
стрелки - движение окружности
Page Up - увеличение скорости движения
Page Down - уменьшение скорости движения
HOME - увеличение радиуса окружности
END - уменьшение радиуса окружности
C++
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#define _WIN32_WINNT 0x0500
#include <Windows.h>
 
class Circle{
public:
    Circle(int x, int y, int r, bool nullBrush = false):
        mCenterX(x),mCenterY(y),mRadius(r>0?r:0),mPen(NULL),mBrush(NULL){
        
        SetPenColor(RGB(0,0,0));
        SetBrushColor(RGB(0,0,0),nullBrush);
    }
    Circle(int x, int y, int r, COLORREF colorPen, COLORREF colorBrush, bool nullBrush = false):
        mCenterX(x),mCenterY(y),mRadius(r>0?r:0),mPen(NULL),mBrush(NULL){
        
        SetPenColor(colorPen);
        SetBrushColor(colorBrush,nullBrush);
    }
    void SetPenColor(COLORREF color){
        if(mPen)
            DeleteObject(mPen);
        mPen=CreatePen(PS_SOLID,3,color);
    }
 
    void SetBrushColor(COLORREF color,bool nullBrush = false){
        mNullBrush=nullBrush;
        if(mBrush)
            DeleteObject(mBrush);
        if(nullBrush){
            mBrush=static_cast<HBRUSH>(GetStockObject(NULL_BRUSH));
            return;
        }
        mBrush=CreateSolidBrush(color);
    }
 
    int GetX(){
        return mCenterX;
    }
    int GetY(){
        return mCenterY;
    }
    int GetRadius(){
        return mRadius;
    }
    void SetX(int newValue){
        mCenterX=newValue;
    }
    void SetY(int newValue){
        mCenterY=newValue;
    }
    void SetRadius(int newValue){
        if(mRadius>=0)
            mRadius=newValue;
    }
    bool GetTransparent(){
        return mNullBrush;
    }
    void Draw(HDC hDC){
        HPEN hOldPen=static_cast<HPEN>(SelectObject(hDC,mPen));
        HBRUSH hOldBrush=static_cast<HBRUSH>(SelectObject(hDC,mBrush));
 
        Ellipse(hDC,mCenterX-mRadius/2,mCenterY-mRadius/2,mCenterX+mRadius/2,mCenterY+mRadius/2);
 
        SelectObject(hDC,hOldPen);
        SelectObject(hDC,hOldBrush);
    }
 
    ~Circle(){
        if(mPen)
            DeleteObject(mPen);
        if(mBrush)
            DeleteObject(mBrush);
    }
private:
    int mCenterX;
    int mCenterY;
    int mRadius;
    bool mNullBrush;
    HPEN mPen;
    HBRUSH mBrush;
};
 
class Colors{
public:
    Colors():index(0){
    };
    Colors & operator++(){
        if(index < size-1)
            ++index;
        else
            index=0;
        return *this;
    }
    operator COLORREF(){
        return colors[index];
    }
    COLORREF GetColor(){
        return colors[index];
    }
private:
    int index;
    static const int size=10;
    static const COLORREF colors[size];
};
 
const COLORREF Colors::colors[size]={
    RGB(255,0,0),
    RGB(0,255,0),
    RGB(0,0,255),
    RGB(255,255,0),
    RGB(255,0,255),
    RGB(0,255,255),
    RGB(127,127,127),
    RGB(50,80,132),
    RGB(0,87,59),
    RGB(143,87,56)
};
 
 
 
POINT GetDirectionShift(){
    POINT point={0,0};
    point.x-=GetAsyncKeyState(VK_LEFT)!=0;
    point.x+=GetAsyncKeyState(VK_RIGHT)!=0;
    point.y-=GetAsyncKeyState(VK_UP)!=0;
    point.y+=GetAsyncKeyState(VK_DOWN)!=0;
    return point;
}
 
bool GetPenColorChange(){
    return GetAsyncKeyState(VK_CONTROL);
}
bool GetBrushColorChange(){
    return GetAsyncKeyState(VK_MENU);
}
int GetSpeedChanges(){
    int x=GetAsyncKeyState(VK_PRIOR)!=0;
    x-=GetAsyncKeyState(VK_NEXT)!=0;
    return x;
}
 
int GetRadiusChanges(){
    int x=GetAsyncKeyState(VK_HOME)!=0;
    x-=GetAsyncKeyState(VK_END)!=0;
    return x;
}
 
int main(){
    HWND hWnd=GetConsoleWindow();
    HDC hDC=GetDC(hWnd);
    RECT bmpRect;
    GetClientRect(hWnd,&bmpRect);
    HDC hBufferDC=CreateCompatibleDC(hDC);
    HBITMAP hBufferBmp=CreateBitmap(bmpRect.right,bmpRect.bottom,1,32,NULL);
    HBITMAP hBufferBmpOld=(HBITMAP)SelectObject(hBufferDC,hBufferBmp);
    Colors colPen,colBrush;
    Circle myCircle(200,200,80,colPen,colBrush,false);
    POINT shift;
    int speedMult;
    speedMult=1;
    while(!GetAsyncKeyState(VK_ESCAPE)){
        FillRect(hBufferDC,&bmpRect,(HBRUSH)GetStockObject(WHITE_BRUSH));
        myCircle.Draw(hBufferDC);
        BitBlt(hDC,0,0,bmpRect.right,bmpRect.bottom,hBufferDC,0,0,SRCCOPY);
        shift=GetDirectionShift();
        if(GetPenColorChange()){
            myCircle.SetPenColor(++colPen);
        }
        if(GetBrushColorChange()){
            myCircle.SetBrushColor(++colBrush,myCircle.GetTransparent());
        }
        speedMult+=GetSpeedChanges();
        myCircle.SetRadius(myCircle.GetRadius()+GetRadiusChanges()*5);
        if(speedMult<0)
            speedMult=0;
        myCircle.SetX(myCircle.GetX()+shift.x*speedMult);
        myCircle.SetY(myCircle.GetY()+shift.y*speedMult);
        Sleep(300);
    }
 
    SelectObject(hBufferDC,hBufferBmpOld);
    DeleteObject(hBufferBmp);
    DeleteDC(hBufferDC);
    ReleaseDC(hWnd,hDC);
}
Без комментариев...
5
-2 / 1 / 1
Регистрация: 06.06.2013
Сообщений: 65
18.06.2013, 20:30  [ТС]
Croessmah, Спасибо огромное! это ты суперого сделал!!!!
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
18.06.2013, 22:33
Croessmah, хотел посмотреть на художество, но выдает это:
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
18.06.2013, 22:34
Или это чисто VS-ные штучки?(
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
18.06.2013, 22:38
Цитата Сообщение от MrGluck Посмотреть сообщение
Или это чисто VS-ные штучки?(
mingw? тогда компилировать с ключом -lgdi32 либо добавить библиотеку gdi32 в параметрах линкера

Ах, да, забыл ESC - выход
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
18.06.2013, 22:46
Croessmah, ключ -lgdi32 не помог

Я вообще в WinAPI не разбираюсь, просто аж любопытно стало, что же там такого нахимичилось)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.06.2013, 22:46
Помогаю со студенческими работами здесь

Нарисовать цветной круг. Ошибка компиляции
Доброго времени суток! Помогите, пожалуйста, разобраться с темной магией Мне нужно нарисовать цветовой круг на плюсах. Как только начал...

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

Выведено изображение, нужно на нем нарисовать по фигуру (квадрат, круг)
Выведено изображение, нужно на нем нарисовать по фигуру (квадрат, круг). размер и положение я должен выбрать.

Как нарисовать круг вписанный в треугольник и подписать его значениями полученными с программы?
Я тут сделал свой курсач, но что-то по сравнению с другими вариантами он оказался прям слишком простецким. В то время как другим надо...

С помощью циклов нарисовать символами "звездочка" куб и круг
Здравствуйте! Задачка сама по себе не сложная, но мозг ломает.. Помогите решить, пожалуйста!! Нужно с помощью циклов нарисовать символами...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru