Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
1

Вывод графических объектов на консоль

11.03.2020, 22:12. Показов 420. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здр.. создал проект на чистом Си в Code::Blocks v17.12 с целью вывода некоторых графических объектов..
подключил директиву препроцессора <graphics.h>, но пишет что такого файла не существует..
как выводить графические объекты на консоль в чистом Си ?? буду рад вашему ответу..
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2020, 22:12
Ответы с готовыми решениями:

Передвижение графических объектов
#include &lt;graphics.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; #include...

Вывод графических объектов на панели
Здравствуйте. Создаю 2 панели при этом используя абсолютное позиционирование. Получается...

Вывод графических примитивов в консольное окно посредством загрузки в консоль bmp изображения
Добрый день! Хочу &quot;написать&quot; код для вывода графических примитивов в консольное окно посредством...

Реализовать вывод массива объектов типа Student на консоль (файловый ввод/вывод)
Как сделать чтобы список студентов выводился на экран в конце? #include&lt;iostream&gt; ...

3
Модератор
Эксперт функциональных языков программированияЭксперт Python
36363 / 19813 / 4149
Регистрация: 12.02.2012
Сообщений: 32,937
Записей в блоге: 13
12.03.2020, 10:39 2
Боюсь, что graphics.h - это для DOS-а. Тем не менее, рисовать в консольном окне вполне возможно. С использованием WinAPI

Добавлено через 1 час 54 минуты
Вот пример вывода графики в консольное окно:

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
#include <stdio.h>
#include <stdlib.h>
 
#include <windows.h>
#include <math.h>
 
#define RED RGB(255,0,0)
#define GRN RGB(0,255,0)
#define BLU RGB(0,0,255)
 
#define BLK RGB(0,0,0)
#define WHT RGB(255,255,255)
 
HPEN  getPen(int iPEN_STYLE, int iPEN_SIZE, int iCOLORREF);
BOOL  SetPoint(HDC hDC, HPEN hPen, COORD PNT);
BOOL  PlotLine(HDC hDC, HPEN hPen, COORD BGN, COORD END);
 
 
double f(double x){return exp(-0.3*x)*cos(5*x);}
 
double * mf(double a, double b, double n)
{
    double x = a;
    double h = (b - a)/n;
    double vec[2];
    vec[0] = f(a);
    vec[1] = f(a);
    while(x < b)
    {
        if(vec[1] < f(x))
            vec[1] = f(x);
        if(f(x) < vec[0])
            vec[0] = f(x);
        x += h;
    }
    return &vec[0];
}
 
int main()
{
    long n;
    double a = 0, b = 0,x, dx, *vec;
    double CX, CY;
    
    HWND    hWnd = GetForegroundWindow();
    HPEN    RPEN = getPen(PS_SOLID, 2, RED);
    HPEN    GPEN = getPen(PS_SOLID, 2, GRN);
    HPEN    BPEN = getPen(PS_SOLID, 2, BLU);
    HPEN    WPEN = getPen(PS_SOLID, 3, WHT);
    RECT    pRECT= {0};
    COORD   BGN  = {0};
    COORD   END  = {0};
    GetClientRect(hWnd,&pRECT);
    
    HDC hDC = GetWindowDC(hWnd);
 
    printf("\tPloting f(x) = ...\r\n");
    printf("Enter diapasone [a;b]\r\n");
    printf("a = ");scanf("%lf",&a);
    printf("b = ");scanf("%lf",&b);
    printf("Enter number of points\r\n");
    printf("n = ");scanf("%u",&n);
    vec = mf(a, b, n);
    if(hDC)
    {
        CX = (b - a)/(pRECT.right - pRECT.left);
        CY = (vec[1] - vec[0])/(pRECT.bottom - pRECT.top);
        
        x = a;dx = (b - a)/n;
        BGN.X = x   /CX;
        BGN.Y = f(x)/CY + (pRECT.bottom - pRECT.top)/2;
        SetBkMode(hDC,TRANSPARENT);
        SetPoint (hDC, WPEN, BGN);
        while(x < b)
        {
            END.X = x   /CX;
            END.Y = f(x)/CY + (pRECT.bottom - pRECT.top)/2;
            PlotLine(hDC, RPEN, BGN, END);
            SetPoint (hDC,WPEN, END);
            BGN = END;
            x += dx;
        }
    }
    system("pause");
    return 0;
}
 
HPEN getPen(int iPEN_STYLE, int iPEN_SIZE, int iCOLORREF)
{
        return CreatePen(iPEN_STYLE, iPEN_SIZE, iCOLORREF);
}
 
BOOL SetPoint(HDC hDC, HPEN hPen, COORD PNT)
{
        EXTLOGPEN pINFO;
        GetObject(hPen,sizeof(EXTLOGPEN),&pINFO);
        SelectObject(hDC,hPen);
        return Ellipse
        (
                hDC,
                PNT.X - pINFO.elpWidth,
                PNT.Y + pINFO.elpWidth, 
                PNT.X + pINFO.elpWidth,
                PNT.Y - pINFO.elpWidth
        );
}
 
BOOL PlotLine(HDC hDC, HPEN hPen, COORD BGN, COORD END)
{
        SelectObject(hDC,hPen);
        MoveToEx(hDC,BGN.X,BGN.Y,NULL);
        return LineTo(  hDC,END.X,END.Y);
}
Задавайте a=0 b=10, n=20 или более...

Добавлено через 4 минуты
Да, забыл сказать: код не мой.
0
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
12.03.2020, 14:42  [ТС] 3
Цитата Сообщение от Catstail Посмотреть сообщение
рисовать в консольном окне вполне возможно. С использованием WinAPI
Catstail, выскакивает куча ошибок и предупреждений..
Вывод графических объектов на консоль
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36363 / 19813 / 4149
Регистрация: 12.02.2012
Сообщений: 32,937
Записей в блоге: 13
12.03.2020, 16:02 4
Цитата Сообщение от proc3nt Посмотреть сообщение
выскакивает куча ошибок и предупреждений..
- и что? А разобраться в чем дело слабо?
Нужно добавить в проект ссылку на библиотеку libgdi32.a. У меня Dev-C++ 4.9.9.2 Создаем проект "Консольное приложение C", проходим по цепочке "Project" -> "Project Options" -> "Parameters" В параметрах линкера нажимаем "Add Library or Object", находим в директории Dev-C++ поддиректорию lib и выбираем нужную библиотеку. Кроме того, чуть поправил код:

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
#include <stdio.h>
#include <stdlib.h>
 
#include <windows.h>
#include <math.h>
 
#define RED RGB(255,0,0)
#define GRN RGB(0,255,0)
#define BLU RGB(0,0,255)
 
#define BLK RGB(0,0,0)
#define WHT RGB(255,255,255)
 
HPEN  getPen(int iPEN_STYLE, int iPEN_SIZE, int iCOLORREF);
BOOL  SetPoint(HDC hDC, HPEN hPen, COORD PNT);
BOOL  PlotLine(HDC hDC, HPEN hPen, COORD BGN, COORD END);
 
double f(double x){return exp(-0.3*x)*cos(5*x);}
 
double * mf(double a, double b, double n)
{
    double x = a;
    double h = (b - a)/n;
    //double vec[2];
    double *vec=(double *) calloc(sizeof(double),2);
    vec[0] = f(a);
    vec[1] = f(a);
    while(x < b)
    {
        if(vec[1] < f(x))
            vec[1] = f(x);
        if(f(x) < vec[0])
            vec[0] = f(x);
        x += h;
    }
    return &vec[0];
}
 
int main()
{
    long n;
    double a = 0, b = 0,x, dx, *vec;
    double CX, CY;
    int i;
    char c;
    
    HWND    hWnd = GetForegroundWindow();
    HPEN    RPEN = getPen(PS_SOLID, 2, RED);
    HPEN    GPEN = getPen(PS_SOLID, 2, GRN);
    HPEN    BPEN = getPen(PS_SOLID, 2, BLU);
    HPEN    WPEN = getPen(PS_SOLID, 3, WHT);
    RECT    pRECT= {0};
    COORD   BGN  = {0};
    COORD   END  = {0};
    
 
    printf("\tPloting f(x) = ...\r\n");
    printf("Enter diapasone [a;b]\r\n");
    printf("a = ");scanf("%lf",&a);
    printf("b = ");scanf("%lf",&b);
    printf("Enter number of points\r\n");
    printf("n = ");scanf("%u",&n);
 
    system("cls");
    
    GetClientRect(hWnd,&pRECT);
    HDC hDC = GetWindowDC(hWnd);
    
    vec = mf(a, b, n);
 
    if(hDC)
    {
        CX = (b - a)/(pRECT.right - pRECT.left);
        CY = (vec[1] - vec[0])/(pRECT.bottom - pRECT.top);
        
        x = a;dx = (b - a)/n;
        BGN.X = x   /CX;
        BGN.Y = f(x)/CY + (pRECT.bottom - pRECT.top)/2;
        SetBkMode(hDC,TRANSPARENT);
        SetPoint (hDC, WPEN, BGN);
        while(x < b)
        {
            END.X = x   /CX;
            END.Y = f(x)/CY + (pRECT.bottom - pRECT.top)/2;
            PlotLine(hDC, RPEN, BGN, END);
            SetPoint (hDC,WPEN, END);
            BGN = END;
            x += dx;
        }
    }
    c=getch();
    free(vec);
    return 0;
}
 
HPEN getPen(int iPEN_STYLE, int iPEN_SIZE, int iCOLORREF)
{
        return CreatePen(iPEN_STYLE, iPEN_SIZE, iCOLORREF);
}
 
BOOL SetPoint(HDC hDC, HPEN hPen, COORD PNT)
{
        EXTLOGPEN pINFO;
        GetObject(hPen,sizeof(EXTLOGPEN),&pINFO);
        SelectObject(hDC,hPen);
        return Ellipse
        (
                hDC,
                PNT.X - pINFO.elpWidth,
                PNT.Y + pINFO.elpWidth, 
                PNT.X + pINFO.elpWidth,
                PNT.Y - pINFO.elpWidth
        );
}
 
BOOL PlotLine(HDC hDC, HPEN hPen, COORD BGN, COORD END)
{
        SelectObject(hDC,hPen);
        MoveToEx(hDC,BGN.X,BGN.Y,NULL);
        return LineTo(  hDC,END.X,END.Y);
}
Если задавать a=0, b=10, n=100, то должна получиться вот такая картинка:
Миниатюры
Вывод графических объектов на консоль  
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2020, 16:02
Помогаю со студенческими работами здесь

Реализовать поиск по заданному полю в массиве объектов типа Student и вывод этих данных на консоль
В задаче надо определить самое часто встречаемое имя среди женщин и среди мужчин. #include...

Передвижение графических объектов
Перемещать треугольник по диагонали с заданным шагом и задержкой в полторы секунды

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

Создание графических объектов
Всем привет. Не могли бы помочь мне с написанием следующей программы: Составить процедуру,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru