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

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

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

Author24 — интернет-сервис помощи студентам
Нужно нарисовать круг в классе чтоб можна било в консоле задавать его 1)цвет 2)радиус 3) и угол на которий я захочю его повернуть!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2013, 13:13
Ответы с готовыми решениями:

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

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

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

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

42
-2 / 1 / 1
Регистрация: 06.06.2013
Сообщений: 65
12.06.2013, 21:10  [ТС] 21
Author24 — интернет-сервис помощи студентам
Croessmah, да ладно необижайся я просто немогу тебе правельно обяснить вот и пытаюсь!) так что сможеш сделать?
0
1437 / 1014 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
13.06.2013, 12:29 22
unikalen, примере Вы привели пример класса с использованием форм.Раз у Вас такие познания,вот и примените их к Вашей задаче
P.S. Командная строка не может использоваться в качестве графического интерфейса.Можно попробовать чтобы программа рисовала окружность из звёздочек,об этом сказано в примере,приведённом мной выше. В среде программирования на Visual Basic Pascal используется интерфейс ПОХОЖИЙ на командную строку.И,если не ошибаюсь,этот язык и Delphi призваны для использования командной для графических целей.
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
13.06.2013, 15:24 23
Цитата Сообщение от 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  [ТС] 24
SatanaXIII, pow почему у меня ошибку выбивает? я не знаю как ее исправить?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.06.2013, 03:55 25
unikalen, давайте угадаю ваш компиль. VS? Приз в студию!
Приведите основание к типу double
static_cast<double>(тут основание)
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
17.06.2013, 11:35 26
Цитата Сообщение от 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  [ТС] 27
SatanaXIII, да ну это не круг а какоето чудо) и не перемещаеца)
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
18.06.2013, 08:58 28
Цитата Сообщение от 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
1437 / 1014 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
18.06.2013, 12:29 29
Цитата Сообщение от SatanaXIII Посмотреть сообщение
int g;
Можно проинициализировать (хотя бы 0),чтобы компилятор об это предупреждение не спотыкался.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
getch();
Может,лучше _getch(); ?
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.06.2013, 18:22 30
unikalen, вам человек просто чудо техники написал, а вам еще и не нравится...
0
-2 / 1 / 1
Регистрация: 06.06.2013
Сообщений: 65
18.06.2013, 18:29  [ТС] 31
Wolkodav, чудо техники?)))) поверь он можэт и намного лутше!! и мне нада намного лутше!!
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.06.2013, 18:32 32
unikalen, а почему он вам должен помогать? Он вам помог, допилите дальше сами...
0
Croessmah
18.06.2013, 18:32
  #33

Не по теме:

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

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

Добавлено через 11 минут
SatanaXIII, А как его перемещать?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
18.06.2013, 20:15 35
Лучший ответ Сообщение было отмечено как решение

Решение

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  [ТС] 36
Croessmah, Спасибо огромное! это ты суперого сделал!!!!
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
18.06.2013, 22:33 37
Croessmah, хотел посмотреть на художество, но выдает это:
Нарисовать круг в классе
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
18.06.2013, 22:34 38
Или это чисто VS-ные штучки?(
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
18.06.2013, 22:38 39
Цитата Сообщение от MrGluck Посмотреть сообщение
Или это чисто VS-ные штучки?(
mingw? тогда компилировать с ключом -lgdi32 либо добавить библиотеку gdi32 в параметрах линкера

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

Я вообще в WinAPI не разбираюсь, просто аж любопытно стало, что же там такого нахимичилось)
0
18.06.2013, 22:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2013, 22:46
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru