Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.78
unikalen
-2 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 65
#1

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

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

Нужно нарисовать круг в классе чтоб можна било в консоле задавать его 1)цвет 2)радиус 3) и угол на которий я захочю его повернуть!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2013, 13:13     Нарисовать круг в классе
Посмотрите здесь:

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

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

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

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

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

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

круг - C++
Нужно вводить точку и что бы писало принадлежет ли она закрашеной области или нет

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
unikalen
-2 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 65
12.06.2013, 21:10  [ТС]     Нарисовать круг в классе #21
Croessmah, да ладно необижайся я просто немогу тебе правельно обяснить вот и пытаюсь!) так что сможеш сделать?
Matan!
234 / 85 / 17
Регистрация: 31.05.2013
Сообщений: 828
Записей в блоге: 2
Завершенные тесты: 1
13.06.2013, 12:29     Нарисовать круг в классе #22
unikalen, примере Вы привели пример класса с использованием форм.Раз у Вас такие познания,вот и примените их к Вашей задаче
P.S. Командная строка не может использоваться в качестве графического интерфейса.Можно попробовать чтобы программа рисовала окружность из звёздочек,об этом сказано в примере,приведённом мной выше. В среде программирования на Visual Basic Pascal используется интерфейс ПОХОЖИЙ на командную строку.И,если не ошибаюсь,этот язык и Delphi призваны для использования командной для графических целей.
SatanaXIII
Супер-модератор
Эксперт С++
5591 / 2625 / 239
Регистрация: 01.11.2011
Сообщений: 6,455
Завершенные тесты: 1
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;
}
unikalen
-2 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 65
16.06.2013, 00:34  [ТС]     Нарисовать круг в классе #24
SatanaXIII, pow почему у меня ошибку выбивает? я не знаю как ее исправить?
MrGluck
Модератор
Эксперт CЭксперт С++
6951 / 4122 / 582
Регистрация: 29.11.2010
Сообщений: 10,942
16.06.2013, 03:55     Нарисовать круг в классе #25
unikalen, давайте угадаю ваш компиль. VS? Приз в студию!
Приведите основание к типу double
static_cast<double>(тут основание)
SatanaXIII
Супер-модератор
Эксперт С++
5591 / 2625 / 239
Регистрация: 01.11.2011
Сообщений: 6,455
Завершенные тесты: 1
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 )
unikalen
-2 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 65
17.06.2013, 21:45  [ТС]     Нарисовать круг в классе #27
SatanaXIII, да ну это не круг а какоето чудо) и не перемещаеца)
SatanaXIII
Супер-модератор
Эксперт С++
5591 / 2625 / 239
Регистрация: 01.11.2011
Сообщений: 6,455
Завершенные тесты: 1
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 Посмотреть сообщение
сделай мне тогда програму которая будет рисовать круг и чтоб в консоле можна било задавать радиус и несколько цветов! а так-же перемещать по екранне его
Matan!
234 / 85 / 17
Регистрация: 31.05.2013
Сообщений: 828
Записей в блоге: 2
Завершенные тесты: 1
18.06.2013, 12:29     Нарисовать круг в классе #29
Цитата Сообщение от SatanaXIII Посмотреть сообщение
int g;
Можно проинициализировать (хотя бы 0),чтобы компилятор об это предупреждение не спотыкался.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
getch();
Может,лучше _getch(); ?
Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
18.06.2013, 18:22     Нарисовать круг в классе #30
unikalen, вам человек просто чудо техники написал, а вам еще и не нравится...
unikalen
-2 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 65
18.06.2013, 18:29  [ТС]     Нарисовать круг в классе #31
Wolkodav, чудо техники?)))) поверь он можэт и намного лутше!! и мне нада намного лутше!!
Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
18.06.2013, 18:32     Нарисовать круг в классе #32
unikalen, а почему он вам должен помогать? Он вам помог, допилите дальше сами...
Croessmah
18.06.2013, 18:32
  #33

Не по теме:

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

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

Добавлено через 11 минут
SatanaXIII, А как его перемещать?
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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);
}
Без комментариев...
unikalen
-2 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 65
18.06.2013, 20:30  [ТС]     Нарисовать круг в классе #36
Croessmah, Спасибо огромное! это ты суперого сделал!!!!
MrGluck
Модератор
Эксперт CЭксперт С++
6951 / 4122 / 582
Регистрация: 29.11.2010
Сообщений: 10,942
18.06.2013, 22:33     Нарисовать круг в классе #37
Croessmah, хотел посмотреть на художество, но выдает это:
Нарисовать круг в классе
MrGluck
Модератор
Эксперт CЭксперт С++
6951 / 4122 / 582
Регистрация: 29.11.2010
Сообщений: 10,942
18.06.2013, 22:34     Нарисовать круг в классе #38
Или это чисто VS-ные штучки?(
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
18.06.2013, 22:38     Нарисовать круг в классе #39
Цитата Сообщение от MrGluck Посмотреть сообщение
Или это чисто VS-ные штучки?(
mingw? тогда компилировать с ключом -lgdi32 либо добавить библиотеку gdi32 в параметрах линкера

Ах, да, забыл ESC - выход
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2013, 22:46     Нарисовать круг в классе
Еще ссылки по теме:

Круг и прямая - C++
Дорогие форумчане! Не откажите в помощи, если есть идеи по заданию. Алгоритм или небольшая помощь с кодом На плоскости заданы...

класс круг С++ - C++
Разработать класс &quot;круг &quot;, который определяется своим радиусом r. Класс должен владеть методами доступа к радиусу; методами определения...

Круг, окружность в С++ - C++
Делаю в задачу в Visual Studio и тут не работает graphics.h. Не подскажите как можно создать окружность или круг? Нужно писать...

Круг в консоли - C++
Всем привет! Буду благодарен, если кто-нибудь сможет подсказать решение. И так, имеется класс Circle, задается радиус и нужно...

закрасить круг - C++
подскажите как можно нарисовать закрасить круг в borlandc


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

Или воспользуйтесь поиском по форуму:
MrGluck
Модератор
Эксперт CЭксперт С++
6951 / 4122 / 582
Регистрация: 29.11.2010
Сообщений: 10,942
18.06.2013, 22:46     Нарисовать круг в классе #40
Croessmah, ключ -lgdi32 не помог
Нарисовать круг в классе
Я вообще в WinAPI не разбираюсь, просто аж любопытно стало, что же там такого нахимичилось)
Yandex
Объявления
18.06.2013, 22:46     Нарисовать круг в классе
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru