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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.80
obZen
1 / 1 / 0
Регистрация: 11.03.2011
Сообщений: 22
#1

Рисование линий по координатам - C++

13.04.2011, 16:16. Просмотров 5944. Ответов 24
Метки нет (Все метки)

Здравствуйте!
Возникла необходимость нарисовать линию по координатам.
Есть ли в С++ ф-я, подобная ф-ии line в Pascal?
Pascal
1
line (x, y, x2, y2);
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2011, 16:16     Рисование линий по координатам
Посмотрите здесь:

Линий в opengl'e - C++
Написал код который выводит дисплей на экран и на нем одну линию, ошибки не одной , но почему-то не выводится линия =( Вопрос , почему? Вот...

Нарисовать 5 линий в Codeblocks - C++
Господа хорошие подскажите как работает графика в этом CB. ЗАДАЧА Есть программа которая производит вычисления и находит 10 точек. ...

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

Создание типов линий - C++
Здравствуйте, необходима помощь по такому вопросу: Нужно создать восемь типов линий с последующим их применением к стандартным фигурам...

преобразование прямых линий - C++
Прошу помочь составить программу по теме: "Преобразование прямых линий". Само задание: Множество прямых М задано коэффициентами их...

вертикальные линий разных цветов - C++
Вывести в ряд 10 вертикальных линий разных цветов, используя оператор gotoxy. Помогите пожалуйста.А то у меня это задание вообще не...

Оптимальный алгоритм рисования линий - C++
1) Является ли алгоритм рисования линии перебором точек оптимальным? for(float i=Xmin, j; i<=Xmax; i+=0.001) { j = k*i + b; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
13.04.2011, 22:02     Рисование линий по координатам #16
Сообщение было отмечено автором темы, экспертом или модератором как ответ
neske был прав. Передвигать квадрат намного сложнее, чем нарисовать сетку.)

Вот сетка и бегающий по ней квадрат (за пределы не выбегает). К-во ячеек можно менять.

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
#if       _WIN32_WINNT < 0x0500
  #undef  _WIN32_WINNT
  #define _WIN32_WINNT   0x0502 // I've got SP2
#endif
//если у вас работает без этих четырех строк - просто уберите их
 
#include <windows.h>
#include <conio.h>
 
#define UP_ARROW 72
#define LEFT_ARROW 75
#define DOWN_ARROW 80
#define RIGHT_ARROW 77
#define N 10  // NхN ячеек
 
 
/*********************************class SQ*****************************************/
class SQ
{   private:
        int _x;
        int _y;
    public:
    SQ():_x(0),_y(0) {}
    SQ(int x,int y)
        {_x = x;_y = y;}
    ~SQ() {}
    
    void setX(int);
    void setY(int);
    int getX();
    int getY();
    void drawSq(HDC, COLORREF);
    void moveIt(HDC);
};
 
void SQ::setX(int x){_x = x;}
 
void SQ::setY(int y) {_y = y;}
 
int SQ::getX() {return _x;}
 
int SQ::getY() {return _y;}
 
void SQ::drawSq(HDC hDC, COLORREF clr)
{   HBRUSH NewBrush = CreateSolidBrush(clr);
    SelectObject(hDC, NewBrush);
    Rectangle(hDC, this->getX(), this->getY(), this->getX()+20, this->getY()+20);
    DeleteObject(NewBrush);
}
 
void SQ::moveIt(HDC hDC)
{   int KeyStroke;
    KeyStroke = getch();
    if (KeyStroke == 224)
    {   KeyStroke = getch(); 
        switch (KeyStroke)
        {
        case UP_ARROW:
            this->drawSq(hDC,RGB(0, 0, 0));
            if(this->getY()!=10) this->setY(this->getY()-20);
            this->drawSq(hDC,RGB(250, 25, 5));
            break;
        case DOWN_ARROW:
            this->drawSq(hDC,RGB(0, 0, 0));
            if(this->getY()!=-10+N*20) this->setY(this->getY()+20);
            this->drawSq(hDC,RGB(250, 25, 5));
            break;
        case LEFT_ARROW:
            this->drawSq(hDC,RGB(0, 0, 0));
            if(this->getX()!=10) this->setX(this->getX()-20);
            this->drawSq(hDC,RGB(250, 25, 5));
            break;
        case RIGHT_ARROW:
            this->drawSq(hDC,RGB(0, 0, 0));
            if(this->getX()!=-10+N*20) this->setX(this->getX()+20);
            this->drawSq(hDC,RGB(250, 25, 5));
        break;
        }
    }
}
 
/*********************************************************************************/
int main()
      {
    HWND hWnd=GetConsoleWindow();
        HDC hDC=GetDC(hWnd);
        
    HPEN cP = CreatePen(PS_SOLID, 2, RGB(0,255,0));
    SelectObject(hDC,cP); 
    POINT p; 
    int x=10,y=10,i;
        
        for(i=0;i<N+1;i++)
        {   MoveToEx(hDC,x+i*20,y,&p);
            LineTo(hDC,x+i*20,y+N*20);
        }
        for(i=0;i<N+1;i++)
        {   MoveToEx(hDC,x,y+i*20,&p);
            LineTo(hDC,x+N*20,y+i*20);
        }
        
    SQ sq(10,10);
    sq.drawSq(hDC,RGB(250, 25, 5));
        
    while(1)
        sq.moveIt(hDC);
 
return 0;
}
Изображения
 
neske
1479 / 846 / 75
Регистрация: 26.03.2010
Сообщений: 2,904
13.04.2011, 22:06     Рисование линий по координатам #17
Даже не знал, что в консоли можно такое делать)
obZen
1 / 1 / 0
Регистрация: 11.03.2011
Сообщений: 22
13.04.2011, 23:34  [ТС]     Рисование линий по координатам #18
Цитата Сообщение от Xtir Посмотреть сообщение
если ты в консоли собираешься делать, то без понятия... ну а если хотя бы в том же диалоговом приложении, то просто добавь в функцию OnPaint()
Откуда появилась ф-я OnPaint? В моё проекте её не было, так что добавлять указанный код некуда

Цитата Сообщение от IrineK Посмотреть сообщение
Рисуем в консоли:
Спасибо! Это именно то, что нужно! Если есть возможность(желание), дайте некоторые объяснения, для полного понимания мной:

HWND - это тип данных?
hWnd - переменная этого типа?
GetConsoleWindow() - дескриптор, как например GetStdHandle и подобные?
HDC hDC=GetDC(hWnd); - объясните, что происходить здесь?
HPEN cP = CreatePen(PS_SOLID, 2, RGB(0,255,0)); - создание линии. Но что такое PS_SOLID остаётся в тумане...
SelectObject(hDC,cP); - подозреваю, что это объект? стыдно, но с объектами ещё не работал...

Остальное понятно.

"Бегающую" ячейку брать не буду, т.к. есть своя реализация, без помощи классов. Да и копипастить все не хочу))

Огромное спасибо, что помогли и извините за глупые вопросы
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
13.04.2011, 23:48     Рисование линий по координатам #19
Цитата Сообщение от Xtir Посмотреть сообщение
уже можно пользоваться этими функциями без подключения каких-либо дополнительных библиотек
#include <windows.h>
Это так чтоб запутать

Цитата Сообщение от Xtir Посмотреть сообщение
. ну а если хотя бы в том же диалоговом приложении
А на чем пишем ??? WinApi? MFC? CLR? или Борланд(как у них обзывается?)

Цитата Сообщение от Xtir Посмотреть сообщение
добавь в функцию OnPaint()
ниче что это обработчик WM_PAINT?

Цитата Сообщение от IrineK Посмотреть сообщение
Передвигать квадрат намного сложнее, чем нарисовать сетку.
А в чем сложность? по коду не видно ?
За пример спасибо, может в жизни пригодится.
IrineK
Заблокирован
13.04.2011, 23:51     Рисование линий по координатам #20
obZen,
вам сюда: http://radiofront.narod.ru/htm/prog/...api/paint.html
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
13.04.2011, 23:59     Рисование линий по координатам #21
obZen,
консоль это такое же окно как и другие
поэтому посмотри любую книгу про Windows раздел графики
лучше всех по моему Петзолд

Цитата Сообщение от obZen Посмотреть сообщение
HWND - это тип данных?
хендер окна( в виндосе все на хендерах)

Цитата Сообщение от obZen Посмотреть сообщение
hWnd - переменная этого типа?
да
Цитата Сообщение от obZen Посмотреть сообщение
GetConsoleWindow()
получить хендер консоли
Цитата Сообщение от obZen Посмотреть сообщение
HDC hDC=GetDC(hWnd); - объясните, что происходить здесь?
получить дескриптор для рисования Система может рисовать не только в окне но и на принтере плотере......
везде будет один и тот же код просто меняем дескриптор
Цитата Сообщение от obZen Посмотреть сообщение
HPEN cP = CreatePen(PS_SOLID, 2, RGB(0,255,0)); - создание линии. Но что такое PS_SOLID остаётся в тумане...
создание пера если будешь рисовать линию надо выбрать перо
конкретно здесь сплошное PS_SOLID ширина 2 цвет зеленый RGB(0,255,0)
Цитата Сообщение от obZen Посмотреть сообщение
SelectObject(hDC,cP);
выбрать перо в дескриптор рисования
obZen
1 / 1 / 0
Регистрация: 11.03.2011
Сообщений: 22
14.04.2011, 00:12  [ТС]     Рисование линий по координатам #22
Цитата Сообщение от IrineK Посмотреть сообщение
Спасибо огромное! Буду учить)

Такой вопрос: нарисовал поле 10х10. Если прокрутить окно вниз и вернуться обратно, изображение стирается...

Добавлено через 2 минуты
ValeryS, Оо.. Спасибо! Объяснили, понял!) Должен знать, что использую, потому и спросил!
А мануал от Иры почитаю)
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
14.04.2011, 00:20     Рисование линий по координатам #23
Цитата Сообщение от obZen Посмотреть сообщение
Если прокрутить окно вниз и вернуться обратно, изображение стирается...
это фишка Виндос система не должна запоминать что нарисовано в окне. окно само дожно себя перерисовывать.
для этого ему посылается сообщение WM_PAINT. оно посылается когда изменился размер, окно перекрыто полностью или частично.....
Но приходит ли оно консоли????
по моему тебе проще создать GUI окно и не мучатся
там все логичней
Olchik
21 / 21 / 3
Регистрация: 31.07.2009
Сообщений: 133
23.04.2011, 13:59     Рисование линий по координатам #24
Есть необходимость сделать массив Point неограниченным (но конечным). Как задавать ограниченный, я знаю, н-р, вот так
C++
1
2
3
4
5
6
7
8
array <Point>^ points =
            {Point(100,200),//a
            Point(120,150),//b
            Point(150,100),//c
            Point(162.5,150),//d
            Point(175,175),//e
            Point(200,200),//f
            Point(125,375)};//g
но он ограничен, а мне надо от 1 до n точек, для того чтоб построить по ним график с помощью
C++
1
>DrawCurve(anyPen,anyPointMas);
Подскажите, плз, как это сделать
работаю в c++, crl, windows form application.
p.s. не стала создавать новую тему, ибо те, кто писал ответы в этой, наверняка знают как это можно реализовать.
p.p.s. рисовать графики именно там, и именно с помощью массива точек и DrawCurve - идея не моя, а преподавателя - хочет, чтоб так ему сделали
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2013, 16:33     Рисование линий по координатам
Еще ссылки по теме:

Программа для сравнения линий - C++
Начала изучать С++. Для прохождения практики нужно составить программу, которая открывает xml файл, в котором находятся по 2 пары координат...

Точка пересечения двух линий в 3D - C++
Есть две линии в 3D, каждая из которых задана двумя точками L1 = p1(x1,y1,z1), p2(x2,y2,z2); L2 = p1(x3,y3,z3), p2(x4,y4,z4) Как можно...

Вычислить по координатам - C++
Привет всем!Помогите,пожалуйста,нужно проверить,лежит ли точка в этом ромбе или нет,вообщем-логические операции.Спасибо большое.

Нарисовать сетку из линий или треугольников - C++
ээээ...не знаю даже как сказать и сформулировать....задача не совсем по программированию на С++....но больше не к кому обратиться...ну...

Программа для построения линий 2 порядка! - C++
Здравствуйте! Нужна программа для построения линий 2-го порядка на С++. Если у кого есть скиньте исходник... Заранее благодарен! ...


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

Или воспользуйтесь поиском по форуму:
ithyphallic
14 / 14 / 1
Регистрация: 27.10.2012
Сообщений: 141
09.11.2013, 16:33     Рисование линий по координатам #25
Цитата Сообщение от obZen Посмотреть сообщение
Возникла необходимость нарисовать линию по координатам.
Есть ли в С++ ф-я, подобная ф-ии line в Pascal? Код Pascal1
line (x, y, x2, y2);
А вот мне нужно именно так, как было описано в начале темы. Нужно нарисовать горизонтальную линию, состоящую из большого количества маленьких отрезков. И очень часто менять левый и правый конец каждого отрезка по координате Y. В Visual Basic это было элементарно - там был объект Line со свойствами x1, y1, x2, y2, который можно было просто разместить на форме. Неужели в C++ нельзя так же просто это сделать?
Yandex
Объявления
09.11.2013, 16:33     Рисование линий по координатам
Ответ Создать тему
Опции темы

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