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

Рисование - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Leonidus
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
16.04.2010, 09:48     Рисование #1
Здравствуйте..)
Что - то обрыскивание интернета не привело меня к удовлетворяющим результатам по поводу рисования в консоли. У нас тут задание: нарисовать круг заданного с клавиатуры радиуса, а внутри круга (наподобие циферблата) нарисовать прямоугольнички (какие нравятся), но их колличество тоже задаётся с клавиатуры. Собственно, всё задание.. Но я не могу найти описания работы с графикой в с++, тем более в консоли.. Может, кто знает..?

Добавлено через 6 минут
Кстати, нашёл несколько тем, где что - то вроде рисуют, но там используется "afxwin.h"
, который студия не хочет находить..
Хотелось бы просто знать, как задать линию, прямоугольник, овал. Дальше разобраться несложно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2010, 09:48     Рисование
Посмотрите здесь:

рисование в с++ C++
C++ Рисование в С++
Рисование на CBitmap C++
C++ Рисование ромба.
C++ графика в си++, рисование
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Leonidus
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
17.04.2010, 09:24  [ТС]     Рисование #2
Через редактор формул я что - то не осилил этот рисунок (не нашёл где радиус ставить). Вот вариант, как должно выглядеть:

Рисование

R и n задаются с клавиатуры. Мне бы узнать как рисовать эти примитивные фигуры, а уж математическую формулу для их упорядочивания на экране, надеюсь, придумаю.. =)
Leonidus
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
18.04.2010, 23:05  [ТС]     Рисование #3
Ни у кого нет идей..?...
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
18.04.2010, 23:12     Рисование #4
По поводу рисования круга , я пришел к такому выводу.
Лучше рисовать так (ну всмысле не окружности а круга)
Расскажу идею.т.к. делал на ВинАПИ.
Берёшь формулу
x=cos(t)*R+x0;
y=sin(t)*R+y0;
где x0,y0 -координаты центра , R - радиус. t - параметр.
Дальше пишешь функцию , которая рисует пиксель (putpixel)
потом делаешь всё в фор
C++
1
2
3
4
5
6
7
for(t=0;t<6.28;t+=0.001)
     for(i=0;i!=R;i++)
             {
              x=cos(t)*i+x0;
              y=sin(t)*i+y0;
                putpixel(x,y);
             }
Вот собственно и всё.
ЗЫ i _ просто некая переменная типа инт.радиус - тоже целое, координаты -целые числа. а параметр - или флоат, или доубле
Leonidus
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
18.04.2010, 23:15  [ТС]     Рисование #5
А квадратики типа аналогично..?)
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
18.04.2010, 23:17     Рисование #6
Цитата Сообщение от Leonidus Посмотреть сообщение
А квадратики типа аналогично..?)
Квадратики можно 4 линиями ))
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
18.04.2010, 23:20     Рисование #7
Цитата Сообщение от Leonidus Посмотреть сообщение
А квадратики типа аналогично..?)
Цитата Сообщение от fasked Посмотреть сообщение
Квадратики можно 4 линиями ))

ага)))
а насчёт эллипса формулу непоню)))) но там не намного сложней)
Leonidus
 Аватар для Leonidus
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 74
18.04.2010, 23:20  [ТС]     Рисование #8
А как линии рисовать..?)
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
18.04.2010, 23:30     Рисование #9
если вин апи, то я делаю так
C
1
2
3
4
5
BOOL DrawLine(HDC hdc, int x1, int y1, int x2, int y2)
{
   MoveToEx(hdc, x1, y1, NULL); 
   return ::LineTo(hdc, x2, y2);
}
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
18.04.2010, 23:31     Рисование #10
блин))))

смотри. есть начальные координаты линии (х1,у1) и конечные (х2,у2)
C горизонталными\вертикальными линиями всё просто.Если хочешь про наклонные - потом расскажу)
Вот. загоняешь всё это в фор.
C++
1
2
for(x=x1,y=y1;x!=x2 && y!=y2;x++,y++)
       putpixel(x,y);
Все переменные целые.
Ну и х1 у1 должны быть меньше\равны х2 у2
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.04.2010, 00:18     Рисование #11
Откровенно не понимаю, зачем сейчас учиться в дос графику рисовать. Если кто знает, какой в этом глубинный смысл, пожалуйста, отпишитесь...

Leonidus, вот часы на Qt, мало ли - пригодится
watch.h
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
#ifndef WATCH_H
#define WATCH_H
 
#include <QtGui>
 
class Watch : public QWidget {
    Q_OBJECT
 
    QTime time;
    QString strTime;
    QPoint hourArrow[3];
    QPoint minuteArrow[3];
    QPoint secundeArrow[3];
    QColor hourColor;
    QColor minuteColor;
    QColor secundeColor;
protected:
    void paintEvent(QPaintEvent *);
public:
    Watch(QWidget *parent = 0);
public slots:
    void update();
};
 
#endif // WATCH_H

watch.cpp
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
#include "watch.h"
 
Watch::Watch(QWidget *parent) : QWidget(parent){
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(1000);
 
    setWindowTitle("iSwatch");
 
    // заготовки для рисования стрелок
    hourArrow[0] = QPoint(7, 8);
    hourArrow[1] = QPoint(-7, 8);
    hourArrow[2] = QPoint(0, -60);
 
    minuteArrow[0] = QPoint(7, 8);
    minuteArrow[1] = QPoint(-7, 8);
    minuteArrow[2] = QPoint(0, -85);
 
    secundeArrow[0] = QPoint(1, 4);
    secundeArrow[1] = QPoint(-1, 4);
    secundeArrow[2] = QPoint(0, -90);
 
    hourColor = QColor(127, 0, 127);
    minuteColor = QColor(0, 127, 127, 190);
    secundeColor = QColor(100, 100, 0, 150);
 
    resize(200, 200);
 
}
 
void Watch::update(){
    time = QTime::currentTime();
    QWidget::update();
}
 
void Watch::paintEvent(QPaintEvent *){
    QPainter p(this);
    p.setRenderHint(QPainter::Antialiasing);
 
    p.translate(width() / 2, height() / 2);
 
    p.setPen(hourColor);
    for ( int i = 0; i < 12; ++i ){
        p.drawLine(88, 0, 96, 0);
        p.rotate(30.0);
    }
 
    p.setPen(Qt::NoPen);
    p.setBrush(hourColor);
 
    p.save();
    p.rotate(30.0 * ( time.hour() + time.minute() / 60.0 ));
    p.drawConvexPolygon(hourArrow, 3);
    p.restore();
 
    p.setBrush(minuteColor);
    p.save();
    p.rotate(6.0 * ( time.minute() + time.second() / 60.0 ));
    p.drawConvexPolygon(minuteArrow, 3);
    p.restore();
 
    p.setBrush(secundeColor);
    p.save();
    p.rotate(6.0 * time.second());
    p.drawConvexPolygon(secundeArrow, 3);
    p.restore();
}

app.cpp
C++
1
2
3
4
5
6
7
8
9
10
#include <QApplication>
#include "watch.h"
 
int main(int argc, char **argv){
    QApplication app(argc, argv);
    Watch w;
    w.show();
 
    return app.exec();
}
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
19.04.2010, 03:42     Рисование #12
если в BCPP 3.1, могу подсказать
сначала было интересно, потом понял, что это лишняя трата сил и времени)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2010, 10:49     Рисование
Еще ссылки по теме:

Рисование в с++ :) C++
Рисование по экрану C++
Рисование в С++ C++

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

Или воспользуйтесь поиском по форуму:
fasked
19.04.2010, 10:49     Рисование
  #13

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
Откровенно не понимаю, зачем сейчас учиться в дос графику рисовать.
Цитата Сообщение от Vorona Посмотреть сообщение
сначала было интересно
Действительно, просто из интереса =)

Yandex
Объявления
19.04.2010, 10:49     Рисование
Ответ Создать тему
Опции темы

Текущее время: 14:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru