как нарисовать хоть что то в консоле
, Тут попрасили помочь сыну в школу задание дали
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.43] |
|
|
как нарисовать хоть что то в консоле
, Тут попрасили помочь сыну в школу задание дали
|
Сообщ.
#1
,
|
|
|
|
помню раньше рисовал в консоли! но не помню как
) какие средства у нас есть ? Т.е. понятно openGL и виндовые средства рисования но было же проще как то. |
|
Сообщ.
#2
,
|
|
|
|
в Borland C++ можно рисовать с помощью средств библиотеки BGI ( graphics.h )
|
|
Сообщ.
#3
,
|
|
|
|
а в VS?
|
|
Сообщ.
#4
,
|
|
|
|
GDI функции.
|
|
Сообщ.
#5
,
|
|
|
|
ммм... ладно попробую
|
|
Сообщ.
#6
,
|
|
|
|
Или чтобы рисовать в текстовом режиме: функции установки курсора и вывода на консоль (псевдографики из ASCII).
|
|
Сообщ.
#7
,
|
|
|
|
да не не псевдографика надо нарисовать как можно проще график синуса
|
|
Сообщ.
#8
,
|
|
|
|
Что-то вроде
![]() ![]() #include <windows.h> #include <cmath> const int N = 100; const double PI = 3.141592; const double T = 2; // число периодов TCHAR title[MAX_PATH]; POINT pts[N]; int _tmain(int argc, _TCHAR* argv[]) { GetConsoleTitle(title, MAX_PATH); HWND hwnd = FindWindow(NULL, title); HDC hdc = GetDC(hwnd); RECT rc; GetClientRect(hwnd, &rc); HPEN hpen = CreatePen(PS_SOLID, 1, RGB(0xFF, 0, 0)); SelectObject(hdc, hpen); MoveToEx(hdc, 0, (rc.bottom - rc.top)/2, 0); for(int i = 0; i < N ; ++i) { pts[i].x = (rc.right - rc.left)*i/100; pts[i].y = (rc.bottom - rc.top)/2*(1.0 + sin(i*T*2.0*PI/N)); } Polyline(hdc, pts, N); DeleteObject(hpen); ReleaseDC(hwnd, hdc); return 0; } |
|
Сообщ.
#9
,
|
|
|
|
LPBOY, работает только в линейке NT/2000/XP.
|
|
Сообщ.
#10
,
|
|
|
|
Почему?
|
|
Сообщ.
#11
,
|
|
|
|
Не знаю. Вопрос к Мелкософтам. Пробовал - в 9х ничерта не рисует. В ХП - рисует.
|
|
Сообщ.
#12
,
|
|
|
|
В консоли можно рисовать график синуса, помечая символами '*' точки на графике, отрисовывая с некоторым шагом.
|
|
Сообщ.
#13
,
|
|
|
|
Да многое можно. Но какое-то нехорошее чувство подсказывает, что великомудрый препод на самом деле просто хочет ДОСовскую прогу, и свято уверен, что это называется "консольной"...
|
|
Сообщ.
#14
,
|
|
|
|
Доброе утро.
Немного другая проблема. Есть dosпрога, написанная когда-то давно на Turbo C. Хочется запустить ее в Builder C++ 6.0. ![]() ![]() #include <stdio.h> #include <graphics.h> #include <dos.h> #include <math.h> #include <conio.h> main () { FILE *in; float z,h,x1,y1,x2,y2,x3,y3,r,t=0; clrscr (); int Driver = DETECT, Mode; initgraph (&Driver, &Mode, "C:\\BC31\\BGI\\"); setbkcolor (BLACK); printf ("\n What way do you want to enter data?"); P: printf ("\n To use keyboard press 1"); printf ("\n To use entering from file press 2: "); scanf ("%f", &z); if (z==1) goto M; else if (z==2) {in=fopen ("source.txt", "r"); fscanf (in, "%d", &r); if (r<0) {printf ("\n Error! Please, check your first number in file. \n It must be r>0"); exit(1);} goto J;} else {clrscr(); printf ("\n Error! Invalid command"); goto P;} M: printf ("\n Please, enter r="); scanf ("%d", &r); if (r<0) {clrscr(); printf ("\n Error! Please, check r. \n It must be r>0"); goto M;} J: x1=300+r*sin(t); y1=200+r*cos(t); t=t+M_PI; x2=300+r*sin(t); y2=200+r*cos(t); t=t+M_PI/2; x3=300+r*sin(t); y3=200+r*cos(t); line (x1,y1,x2,y2); line (x1,y1,x3,y3); line (x2,y2,x3,y3); delay(250); clrscr(); t=t+0.5; goto J; fclose (in); } Скачал файлик graphics.h. Кинул в папку include. Функция initgraph теперь выглядит так: initgraph(&Driver, &Mode, ""); Пытаюсь скомпилить, появляется ошибка: [C++ Fatal Error] graphics.h(10): F1003 Error directive: BGI graphics not supported under Windows Как можно переделать прогу, чтобы она заработала. Рисовать нужно именно в консоли. ОС WinXP SP2 компилятор C++ Builder 6.0 |
|
Сообщ.
#15
,
|
|
|
|
IGV, во-первых, незачем поднимать такие старые темы - для новых вопросов обычно создаются новые топики. Во-вторых, если используешь
Цитата IGV @ то у тебя есть два варианта: либо рисовать непосредственно на канве формы (или одного из компонентов, специально для этого предназначенных - TPaintBox, TImage и т.д.), используя соответствующие методы и свойства (Pixels, LineTo, MoveTo, Arc и пр.), либо обратить внимание в сторону проекта Dos Graphics Migration Library. компилятор C++ Builder 6.0 |
|
Сообщ.
#16
,
|
|
|
|
Синусоида в консоле:
![]() ![]() #include <iostream> #include <vector> #include <algorithm> #include <functional> #include <iterator> #include <math.h> typedef std::vector<std::vector<char> > CharMatrix; class Shape { public: virtual ~Shape() { } void Release() { delete this; } virtual void Draw(CharMatrix* buf) = 0; }; class Sin : public Shape { void Draw(CharMatrix* buf) { int Rows = buf->size(); int Cols = (*buf)[0].size(); const int Count = 1000; for (int i = 0 ; i < Count ; ++i) { int Col = int((1.0 * i * Cols) / Count); int Row = int((sin((12.56 * i) / Count) / 2.0 + 0.5) * Rows); (*buf)[Row][Col] = '*'; } } }; void main() { CharMatrix m(25, std::vector<char>(80, ' ')); std::vector<Shape*> Shapes; Shapes.push_back(new Sin); std::for_each(Shapes.begin(), Shapes.end(), std::bind2nd(std::mem_fun1<void, Shape, CharMatrix*>(&Shape::Draw), &m)); for (CharMatrix::const_iterator i = m.begin() ; i != m.end() ; ++i) { std::copy(i->begin(), i->end(), std::ostream_iterator<char>(std::cout)); std::cout << std::endl; } std::for_each(Shapes.begin(), Shapes.end(), std::mem_fun<void, Shape>(&Shape::Release)); } Аналогичная тема |