Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Рисование Рисование точек по координатам - C#
Доброе время суток. Помогите мне наглядным примером. У меня есть массив координат a х у 1 2 3 4 1 3 кпримеру, мне нужно...

Массив: отрисовка массива линий по координатам - Turbo Pascal
Создать программу выполняющую действия: 1)вводить и сохранять в массиве данных введенные пользователем координаты линий {знаю что у линий...

Построить несколько линий в пространстве по координатам - Matlab
Здравствуйте! Подскажите, можно ли построить в программе несколько линий в пространстве по координатам? Например, есть координаты трех...

Рисование линий - C#
Подскажите как нарисовать подряд линии? Graphics gr = e.Graphics; Pen p = new Pen(Color.Blue, 5);// цвет линии и ширина ...

Рисование линий - C#
Есть маленькая форма, на ней можно мышкой рисовать линии. Соль в том что в Paint сохраняется почему-то только последняя линия, хотя...

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

24
Xtir
12 / 12 / 0
Регистрация: 10.07.2010
Сообщений: 130
13.04.2011, 16:24 #2
есть
C++
1
MoveTo(x,y)
и
C++
1
LineTo(x2,y2)
0
obZen
1 / 1 / 0
Регистрация: 11.03.2011
Сообщений: 22
13.04.2011, 16:42  [ТС] #3
Цитата Сообщение от Xtir Посмотреть сообщение
есть
C++
1
MoveTo(x,y)
и
C++
1
LineTo(x2,y2)
Какая библиотека для этого нужна?
0
IrineK
Заблокирован
13.04.2011, 17:09 #4
Есть ли в С++ ф-я, подобная ф-ии line в Pascal?
Совершенно подобное нечто можно найти в TurboC. Как и в Pascal - рисуем в режиме VGA.
Достаточно подключить:
C++
1
#include <graphics.h>
Если же рисуем под Windows, задача имеет великое множество решений. Уточните, в чем именно работаем.
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
13.04.2011, 17:10 #5
Xtir, не надо вводить людей в заблуждение. В стандарте языка нет таких функций.

obZen, существует множество библиотек для работы с графикой. Какая именно тебя интересует?
0
obZen
1 / 1 / 0
Регистрация: 11.03.2011
Сообщений: 22
13.04.2011, 17:29  [ТС] #6
IrineK, Nameless One: работаю в Visual Studio C++, в консольном окне.
Необходимо нарисовать таблицу, к примеру, размером 10*10 ячеек, все ячейки одинаковые.
Т.е. желательно, чтобы линии были непрерывными - тирэ и вертикальными слешами рисовать неудобно, да и не получу необходимый эффект...

Цитата Сообщение от Nameless One Посмотреть сообщение
Xtir, не надо вводить людей в заблуждение. В стандарте языка нет таких функций.
Xtir, есть реализация данных ф-й?
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
13.04.2011, 17:41 #7
obZen, единственная известная мне библиотека для вывода в консоль, которая хоть как-то развивается - это *curses. Вроде и под Windows она портирована тоже.
Под твой компилятор предложенный вариант с graphics.h не подойдет, т.к. Turbo C давно скончался вместе с DOS'ом и необходимостью подобных библиотек для Windows.
Ты уточни задачу, вдруг тут можно обойтись обычным форматированным выводом.
Ну и, конечно, можно создать простенькое GUI-приложение с помощью какого-нибудь тулкита - тут уж выбор действительно богатый.
0
IrineK
Заблокирован
13.04.2011, 17:43 #8
Все-таки, лучший вариант для таблицы в консоли
тирэ и вертикальными слешами рисовать
Скорее всего, ваша проблема в форматированном выводе.


В противном случае - углубляйтесь в WinAPI. Эффекты - потрясающие.
0
obZen
1 / 1 / 0
Регистрация: 11.03.2011
Сообщений: 22
13.04.2011, 18:08  [ТС] #9
Цитата Сообщение от Nameless One Посмотреть сообщение
obZen,
Ты уточни задачу, вдруг тут можно обойтись обычным форматированным выводом.
Необходимо нарисовать поле для игры в сапер, примерно выглядит так(набросил в пеинте):
Название: Безымянный.JPG
Просмотров: 688

Размер: 3.8 Кб
Зеленая ячейка будет перемещаться с помощью стрелочек.
Как оказалось, самое сложное - это нарисовать это поле.

С помощью MoveTo, LineTo, это можно было бы реализовать с помощью одного цикла и 4 строк.. только объясните как пользоваться..
А так...
0
prazuber
110 / 110 / 3
Регистрация: 29.04.2010
Сообщений: 240
13.04.2011, 18:10 #10
Мне кажется, лучше это рисовать не в консоли, а с помощью OpenGL\DirectX.
0
neske
1503 / 870 / 84
Регистрация: 26.03.2010
Сообщений: 2,985
13.04.2011, 18:10 #11
Да нет, помоему сложнее передвигать зеленый квадрат в консоли)
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
13.04.2011, 18:15 #12
PraZuBeR, это называется "стрелять из пушки по воробьям".
А по поводу задачи - можно поле сделать следующим образом. Пустая ячейка обозначается одним символом, занятая - другим, а роль линий играют символы пробела:
Код
o o o o o
o o o o o
o o o o o
o x o o o
o o o o o
Чем не поле?
0
obZen
1 / 1 / 0
Регистрация: 11.03.2011
Сообщений: 22
13.04.2011, 18:25  [ТС] #13
Цитата Сообщение от PraZuBeR Посмотреть сообщение
Мне кажется, лучше это рисовать не в консоли, а с помощью OpenGL\DirectX.
как бы так объяснить... необходма реализация программы на том уровне, к-й сейчас преподают.
Т.е. если увидят реализацию с помощью OpenGL, появится много новых вопросов и претензий. А этого не хотелось бы...

Алгоритм игры, рекурсивный поиск, перемещение выделенной ячейки впринципе все это уже продумал...
Проблема, как это разместить графически.

Была идея вызывать ф-ю, которая печатала бы по 1 символу в указанных координатах: █, █, ▀, ▀. Тогда одна ячейка выглядела бы так:
██
▀▀ - в консоли это был бы квадрат.., т .е ██.

НО! Если брать поле размером 10х10 таких ячеек, то эту ф-ю необходимо вызывать 400 раз, что само по себе уже неприемлемо...

Вот и интересуюсь как можно реализовать сетку другим способом...

Добавлено через 3 минуты
Цитата Сообщение от neske Посмотреть сообщение
Да нет, помоему сложнее передвигать зеленый квадрат в консоли)
Передвигать я умею)
Вот только по чему его передвигать? По сетке... а эту сетку необходимо нарисовать!...
0
Xtir
12 / 12 / 0
Регистрация: 10.07.2010
Сообщений: 130
13.04.2011, 19:16 #14
Цитата Сообщение от Nameless One Посмотреть сообщение
Xtir, не надо вводить людей в заблуждение. В стандарте языка нет таких функций.
понятия не имею какие функции входят в стандарт с++, а какие нет, но знаю точно, что если создать приложение хотя бы на базе диалогового окна, то уже можно пользоваться этими функциями без подключения каких-либо дополнительных библиотек

Цитата Сообщение от obZen Посмотреть сообщение
...
Вот только по чему его передвигать? По сетке... а эту сетку необходимо нарисовать!...
если ты в консоли собираешься делать, то без понятия... ну а если хотя бы в том же диалоговом приложении, то просто добавь в функцию OnPaint() следующие строки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
else
{
    CPaintDC dc(this);
 
    for(int i = 0; i < 10; ++i)
    {
        dc.MoveTo(i*40,0);
        dc.LineTo(i*40,300);
        dc.MoveTo(0,i*40);
        dc.LineTo(300,i*40);
    }
 
    CDialog::OnPaint();
}
длину и ширину сам уже подкорректируешь
0
IrineK
Заблокирован
13.04.2011, 19:59 #15
Рисуем в консоли:

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
#if       _WIN32_WINNT < 0x0500
  #undef  _WIN32_WINNT
  #define _WIN32_WINNT   0x0502 // I've got SP2
#endif
//если у вас работает без этих четырех строк - просто уберите их
 
#include <windows.h>
#include <conio.h>
#include <iostream>
 
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<6;i++)
        {   MoveToEx(hDC,x+i*20,y,&p);
            LineTo(hDC,x+i*20,y+100);
        }
        for(i=0;i<6;i++)
        {   MoveToEx(hDC,x,y+i*20,&p);
            LineTo(hDC,x+100,y+i*20);
        }
 
        std::cin.get();
return 0;
}
2
Изображения
 
13.04.2011, 19:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2011, 19:59
Привет! Вот еще темы с ответами:

рисование линий - Visual Basic
помогите пожалуйста. мне надо,чтобы по нажатию мыши в вершинах многоугольника(я его загружаю через commanddialog) должны прорисовываться...

Рисование линий - Программирование Android
Здравствуйте все. Мой вопрос в том, как нарисовать линии поверх изображения так, чтобы при зумировании изображения линии соответствовали...

Рисование линий в формах - Visual C++
Здравствуйте! Изучала C/C#/C++ еще на 2м курсе, и теперь совсем забыла некоторые вещи... Вот сейчас не могу найти, как конкретно...

TImage:рисование линий - C++ Builder
проблема такого характера: 1)нужно с помощю мыши нарисовать линию. 2)высчитать длину линии в пикселях Подскажите как это...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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