0 / 0 / 0
Регистрация: 31.10.2014
Сообщений: 39
1

Как с использованием графических средств C++ сделать "движущийся самолёт"?

16.05.2016, 12:01. Показов 1536. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть программный код этого "самолёта" (написан на dev-C++). Нужно изменить код так, чтобы он правильно передвигался в пространстве. Также нужно исправить проблему: самолёт передвигается при нажатии кнопок q,w,e,s только при английской раскладке клавиатуры. Подскажите пожалуйста, как это исправить.
Насколько понял, библиотекой graphics.h уже никто не пользуется, тем более, в VS она не предусмотрена.
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <graphics.h>
#include <conio.h>
 
using namespace std;
 
int const V=21;
int const E=28;
double const SV[V][4]={{-2,0,0,1},{0,1,1,1},{0,1,-1,1},{0,-1,-1,1},{0,-1,1,1},{5,1,1,1},{5,1,-1,1},{5,-1,-1,1},{5,-1,1,1},{2,0,1,1},{4,0,1,1},{4,0,4,1},{5,0,4,1},{2,0,-1,1},{4,0,-1,1},{4,0,-4,1},{5,0,-4,1},{3,-1,0,1},{5,-1,0,1},{5,-3,0,1},{4,-3,0,1}};
double SVe[V][4];
int const SE[E][2]={{0,1},{0,2},{0,3},{0,4},{1,2},{2,3},{3,4},{4,1},{5,6},{6,7},{7,8},{8,5},{1,5},{2,6},{3,7},{4,8},{9,10},{10,12},{12,11},{11,9},{13,14},{14,16},{16,15},{15,13},{17,18},{18,19},{19,20},{20,17}};
int const dw=100;
int const w_heigh=dw*7, w_wide=dw*8;
int const xemin=0, yemin=0, xemax=xemin+w_wide, yemax=yemin+w_heigh; double xmax=tan((100*M_PI/180)/2), xmin=-xmax, ymax=xmax*9/16, ymin=-ymax;
double k=(xemax-xemin)/(xmax-xmin);
int xec=(xemin+xemax)/2, yec=(yemin+yemax)/2;
double xc=(xmin+xmax)/2, yc=(ymin+ymax)/2;
int S[4]={0,0,1,1};
void OTE(double x, double y, int &xe, int &ye)
{
    xe=(int)(xec+k*(x-xc));
    ye=(int)(yec-k*(y-yc));
}
 
double C_om[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{-2,-0.5,-5,1}};
double C_mn[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
double C_nk[4][4]={{1,0,0,0},{0,1,0,0},{0,0,0,-1},{0,0,0,1}};
double C_ke[4][4]={{k,0,0,0},{0,k,0,0},{0,0,0,0},{xec-k*xc,yec+k*yc,0,1}};
double C_oe[4][4];
double C_me[4][4];
int const esckey=27;
int const leftkey=75;
int const rightkey=77;
int const upkey=80;
int const downkey=72;
int const leftnumkey=101;
int const rightnumkey=113;
int const upnumkey=115;
int const downnumkey=119;
 
double v=0.1;
double phi=2*M_PI/180;
double T_up[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,-v,1}};
double T_down[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,v,1}};
double T_left[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{v,0,0,1}};
double T_right[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{-v,0,0,1}};
double R_up[4][4]={{1,0,0,0},{0,cos(phi),-sin(phi),0},{0,sin(phi),cos(phi),0},{0,0,0,1}};//{{cos(phi),-sin(phi),0,0},{sin(phi),cos(phi),0,0},{0,0,1,0},{0,0,0,1}};
double R_down[4][4]={{1,0,0,0},{0,cos(phi),sin(phi),0},{0,-sin(phi),cos(phi),0},{0,0,0,1}};//{{cos(phi),sin(phi),0,0},{-sin(phi),cos(phi),0,0},{0,0,1,0},{0,0,0,1}};
double R_left[4][4]={{cos(phi),0,-sin(phi),0},{0,1,0,0},{sin(phi),0,cos(phi),0},{0,0,0,1}};
double R_right[4][4]={{cos(phi),0,sin(phi),0},{0,1,0,0},{-sin(phi),0,cos(phi),0},{0,0,0,1}};
 
void umn_matr(double a[4][4], double b[4][4], double c[4][4])// Процедура умножения матриц
{ 
    double s;
    for(int i=0; i<4; i++)
        for(int j=0; j<4; j++)
        {
            c[i][j]=0;
            
            for(int k=0; k<4; k++)
            
            c[i][j]=c[i][j]+a[i][k]*b[k][j];
        }                
}
 
void mcopy(double a[4][4], double b[4][4])
{
    int i,j;
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
            a[i][j]=b[i][j];
}
 
void mprint(double x[4][4])
{
    cout<<endl;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
            cout<<x[i][j]<<"  ";
        cout<<endl;
    }
    cout<<endl;
}
 
void preobr_OE()
{
    int i,j,k; double h;
    for(i=0;i<V;i++)
        for(j=0;j<4;j++)
        {
            SVe[i][j]=0;
            for(k=0;k<4;k++)
                SVe[i][j]+=SV[i][k]*C_oe[k][j];
            
        }
    for(i=0;i<V;i++)
    {
        if(SV[i][3]!=0)
        {
            if(SVe[i][3]>0)
                h=SVe[i][3];
            else
                h=-SVe[i][3];
            for(j=0;j<4;j++)
                SVe[i][j]=floor(SVe[i][j]/h);
        }
    }
}
 
void display()
{
    int k,i,j;
    for(k=0;k<E;k++)
    {
        i=SE[k][0];
        j=SE[k][1];
        line((int)SVe[i][0],(int)SVe[i][1],(int)SVe[j][0],(int)SVe[j][1]);
    }
    cout<<endl;
}
 
void initdata()
{
    double T_mk[4][4];
    umn_matr(C_mn,C_nk,T_mk);
    umn_matr(T_mk,C_ke,C_me);
    initwindow(w_wide,w_heigh);
    setfillstyle(1,BLACK);
    umn_matr(C_om,C_me,C_oe);
    preobr_OE();
    display();
    bool cont=true;
    int code;
    double C_omnew[4][4];
    mprint(T_left);
    mprint(C_omnew);
    umn_matr(T_left,C_om,C_omnew);
    while(cont)
    {
        code=getch();
        if(code==0)
            code=getch();
        if(code==esckey)
            cont=false;
        else
        {
            switch(code)
            {
                case leftkey:{umn_matr(T_left,C_om,C_omnew);} break;
                case rightkey:{umn_matr(T_right,C_om,C_omnew);} break;
                case upkey:{umn_matr(T_up,C_om,C_omnew);} break;
                case downkey:{umn_matr(T_down,C_om,C_omnew);} break;
                case leftnumkey:{umn_matr(C_om,R_left,C_omnew);} break;
                case rightnumkey:{umn_matr(C_om,R_right,C_omnew);} break;
                case upnumkey:{umn_matr(C_om,R_up,C_omnew);} break;
                case downnumkey:{umn_matr(C_om,R_down,C_omnew);} break;
            }
            mcopy(C_om,C_omnew);
            umn_matr(C_om,C_me,C_oe);
            preobr_OE();
            bar(0,0,w_wide-1,w_heigh-1);
            display();
        }
    }
    closegraph();
}
int main(int argc, char *argv[])
{
    initdata();
    system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2016, 12:01
Ответы с готовыми решениями:

Программирование с использованием графических средств.
Разработать программу расчета и вывода на экран графика функции y=f(x). График функции вывести в...

Тема: Программирование с использованием файлов и графических средств.
Часть 1. Программирование с использованием файлов. Задание 1. Составить программу, которая...

Нарисовать движущийся самолет.
У нас есть цель, сверху летает самолёт и при нажатии клавиши он скидывает бомбу, если бомба попала...

Использование графических средств
Должен получит домик с деревом(в приложение рисунок ),нарисовала основу дома и почти крышу,помогите...

Рисование фигуры с применением графических средств Паскаля [во вложении]
В школе заставили делать нечто вроде проекта, а так как графику в Pascal я подзабыл, то прошу...

15
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
16.05.2016, 12:33 2
Коды символов русской раскладки добавь в switch.
1
0 / 0 / 0
Регистрация: 31.10.2014
Сообщений: 39
16.05.2016, 13:59  [ТС] 3
Добавил в case кнопки, у меня выскакивает ошибка: [Error] ld returned 1 exit status. Ссылается на Makefile.win
Что бы это могло значить, не знаете?
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <graphics.h>
#include <conio.h>
 
using namespace std;
 
int const V=21;
int const E=28;
double const SV[V][4]={{-2,0,0,1},{0,1,1,1},{0,1,-1,1},{0,-1,-1,1},{0,-1,1,1},{5,1,1,1},{5,1,-1,1},{5,-1,-1,1},{5,-1,1,1},{2,0,1,1},{4,0,1,1},{4,0,4,1},{5,0,4,1},{2,0,-1,1},{4,0,-1,1},{4,0,-4,1},{5,0,-4,1},{3,-1,0,1},{5,-1,0,1},{5,-3,0,1},{4,-3,0,1}};
double SVe[V][4];
int const SE[E][2]={{0,1},{0,2},{0,3},{0,4},{1,2},{2,3},{3,4},{4,1},{5,6},{6,7},{7,8},{8,5},{1,5},{2,6},{3,7},{4,8},{9,10},{10,12},{12,11},{11,9},{13,14},{14,16},{16,15},{15,13},{17,18},{18,19},{19,20},{20,17}};
int const dw=100;
int const w_heigh=dw*7, w_wide=dw*8;
int const xemin=0, yemin=0, xemax=xemin+w_wide, yemax=yemin+w_heigh; double xmax=tan((100*M_PI/180)/2), xmin=-xmax, ymax=xmax*9/16, ymin=-ymax;
double k=(xemax-xemin)/(xmax-xmin);
int xec=(xemin+xemax)/2, yec=(yemin+yemax)/2;
double xc=(xmin+xmax)/2, yc=(ymin+ymax)/2;
int S[4]={0,0,1,1};
void OTE(double x, double y, int &xe, int &ye)
{
    xe=(int)(xec+k*(x-xc));
    ye=(int)(yec-k*(y-yc));
}
 
double C_om[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{-2,-0.5,-5,1}};
double C_mn[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
double C_nk[4][4]={{1,0,0,0},{0,1,0,0},{0,0,0,-1},{0,0,0,1}};
double C_ke[4][4]={{k,0,0,0},{0,k,0,0},{0,0,0,0},{xec-k*xc,yec+k*yc,0,1}};
double C_oe[4][4];
double C_me[4][4];
int const esckey=27;
int const leftkey=75;
int const rightkey=77;
int const upkey=80;
int const downkey=72;
int const leftnumkey=101;
int const rightnumkey=113;
int const upnumkey=115;
int const downnumkey=119;
int const leftnumkey1=163;
int const rightnumkey1=169;
int const upnumkey1=235;
int const downnumkey1=231;
 
 
double v=0.1;
double phi=2*M_PI/180;
double T_up[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,-v,1}};
double T_down[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,v,1}};
double T_left[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{v,0,0,1}};
double T_right[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{-v,0,0,1}};
double R_up[4][4]={{1,0,0,0},{0,cos(phi),-sin(phi),0},{0,sin(phi),cos(phi),0},{0,0,0,1}};//{{cos(phi),-sin(phi),0,0},{sin(phi),cos(phi),0,0},{0,0,1,0},{0,0,0,1}};
double R_down[4][4]={{1,0,0,0},{0,cos(phi),sin(phi),0},{0,-sin(phi),cos(phi),0},{0,0,0,1}};//{{cos(phi),sin(phi),0,0},{-sin(phi),cos(phi),0,0},{0,0,1,0},{0,0,0,1}};
double R_left[4][4]={{cos(phi),0,-sin(phi),0},{0,1,0,0},{sin(phi),0,cos(phi),0},{0,0,0,1}};
double R_right[4][4]={{cos(phi),0,sin(phi),0},{0,1,0,0},{-sin(phi),0,cos(phi),0},{0,0,0,1}};
 
void umn_matr(double a[4][4], double b[4][4], double c[4][4])// Процедура умножения матриц
{ 
    double s;
    for(int i=0; i<4; i++)
        for(int j=0; j<4; j++)
        {
            c[i][j]=0;
            
            for(int k=0; k<4; k++)
            
            c[i][j]=c[i][j]+a[i][k]*b[k][j];
        }                
}
 
void mcopy(double a[4][4], double b[4][4])
{
    int i,j;
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
            a[i][j]=b[i][j];
}
 
void mprint(double x[4][4])
{
    cout<<endl;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
            cout<<x[i][j]<<"  ";
        cout<<endl;
    }
    cout<<endl;
}
 
void preobr_OE()
{
    int i,j,k; double h;
    for(i=0;i<V;i++)
        for(j=0;j<4;j++)
        {
            SVe[i][j]=0;
            for(k=0;k<4;k++)
                SVe[i][j]+=SV[i][k]*C_oe[k][j];
            
        }
    for(i=0;i<V;i++)
    {
        if(SV[i][3]!=0)
        {
            if(SVe[i][3]>0)
                h=SVe[i][3];
            else
                h=-SVe[i][3];
            for(j=0;j<4;j++)
                SVe[i][j]=floor(SVe[i][j]/h);
        }
    }
}
 
void display()
{
    int k,i,j;
    for(k=0;k<E;k++)
    {
        i=SE[k][0];
        j=SE[k][1];
        line((int)SVe[i][0],(int)SVe[i][1],(int)SVe[j][0],(int)SVe[j][1]);
    }
    cout<<endl;
}
 
void initdata()
{
    double T_mk[4][4];
    umn_matr(C_mn,C_nk,T_mk);
    umn_matr(T_mk,C_ke,C_me);
    initwindow(w_wide,w_heigh);
    setfillstyle(1,BLACK);
    umn_matr(C_om,C_me,C_oe);
    preobr_OE();
    display();
    bool cont=true;
    int code;
    double C_omnew[4][4];
    mprint(T_left);
    mprint(C_omnew);
    umn_matr(T_left,C_om,C_omnew);
    while(cont)
    {
        code=getch();
        if(code==0)
            code=getch();
        if(code==esckey)
            cont=false;
        else
        {
            switch(code)
            {
                case leftkey:{umn_matr(T_left,C_om,C_omnew);} break;
                case rightkey:{umn_matr(T_right,C_om,C_omnew);} break;
                case upkey:{umn_matr(T_up,C_om,C_omnew);} break;
                case downkey:{umn_matr(T_down,C_om,C_omnew);} break;
                case leftnumkey:{umn_matr(C_om,R_left,C_omnew);} break;
                case rightnumkey:{umn_matr(C_om,R_right,C_omnew);} break;
                case upnumkey:{umn_matr(C_om,R_up,C_omnew);} break;
                case downnumkey:{umn_matr(C_om,R_down,C_omnew);} break;
                case leftnumkey1:{umn_matr(T_left,C_om,C_omnew);} break;
                case rightnumkey1:{umn_matr(T_right,C_om,C_omnew);} break;
                case upnumkey1:{umn_matr(T_up,C_om,C_omnew);} break;
                case downnumkey1:{umn_matr(T_down,C_om,C_omnew);} break;
            }
            mcopy(C_om,C_omnew);
            umn_matr(C_om,C_me,C_oe);
            preobr_OE();
            bar(0,0,w_wide-1,w_heigh-1);
            display();
        }
    }
    closegraph();
}
int main(int argc, char *argv[])
{
    initdata();
    system("pause");
}
Миниатюры
Как с использованием графических средств C++ сделать "движущийся самолёт"?  
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
16.05.2016, 14:15 4
Какие-то проблемы с этой древней библиотекой. А ты больше ничего не менял? Старый вариант работает?
0
0 / 0 / 0
Регистрация: 31.10.2014
Сообщений: 39
16.05.2016, 14:19  [ТС] 5
Мне скинули готовый проект, он рабочий. Стоит только откомпилировать, всё,ошибка.
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
16.05.2016, 14:54 6
А, т. е. там уже exe есть в комплекте? Ну это уже вопрос настройки древних библиотек.
0
0 / 0 / 0
Регистрация: 31.10.2014
Сообщений: 39
16.05.2016, 19:01  [ТС] 7
Да, был готовый .exe

Добавлено через 7 минут
С библиотекой проблема решена, теперь всё нормально компилируется, но после добавления в switch русских кнопок движения нет. Причём я пробовал вставлять коды и заглавных русских букв из табл. ASCII, и строчных
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <graphics.h>
#include <conio.h>
 
using namespace std;
 
const int V=21;
int const E=28;
double const SV[V][4]={{-2,0,0,1},{0,1,1,1},{0,1,-1,1},{0,-1,-1,1},{0,-1,1,1},{5,1,1,1},{5,1,-1,1},{5,-1,-1,1},{5,-1,1,1},{2,0,1,1},{4,0,1,1},{4,0,4,1},{5,0,4,1},{2,0,-1,1},{4,0,-1,1},{4,0,-4,1},{5,0,-4,1},{3,-1,0,1},{5,-1,0,1},{5,-3,0,1},{4,-3,0,1}};
double SVe[V][4];
int const SE[E][2]={{0,1},{0,2},{0,3},{0,4},{1,2},{2,3},{3,4},{4,1},{5,6},{6,7},{7,8},{8,5},{1,5},{2,6},{3,7},{4,8},{9,10},{10,12},{12,11},{11,9},{13,14},{14,16},{16,15},{15,13},{17,18},{18,19},{19,20},{20,17}};
int const dw=100;
int const w_heigh=dw*7, w_wide=dw*8;
int const xemin=0, yemin=0, xemax=xemin+w_wide, yemax=yemin+w_heigh; double xmax=tan((100*M_PI/180)/2), xmin=-xmax, ymax=xmax*9/16, ymin=-ymax;
double k=(xemax-xemin)/(xmax-xmin);
int xec=(xemin+xemax)/2, yec=(yemin+yemax)/2;
double xc=(xmin+xmax)/2, yc=(ymin+ymax)/2;
int S[4]={0,0,1,1};
void OTE(double x, double y, int &xe, int &ye)
{
    xe=(int)(xec+k*(x-xc));
    ye=(int)(yec-k*(y-yc));
}
 
double C_om[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{-2,-0.5,-5,1}};
double C_mn[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
double C_nk[4][4]={{1,0,0,0},{0,1,0,0},{0,0,0,-1},{0,0,0,1}};
double C_ke[4][4]={{k,0,0,0},{0,k,0,0},{0,0,0,0},{xec-k*xc,yec+k*yc,0,1}};
double C_oe[4][4];
double C_me[4][4];
int const esckey=27;
int const leftkey=75;
int const rightkey=77;
int const upkey=80;
int const downkey=72;
int const leftnumkey=101;
int const rightnumkey=113;
int const upnumkey=115;
int const downnumkey=119;
int const leftnumkey1=130;
int const rightnumkey1=137;
int const upnumkey1=150;
int const downnumkey1=231;
 
double v=0.1;
double phi=2*M_PI/180;
double T_up[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,-v,1}};
double T_down[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,v,1}};
double T_left[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{v,0,0,1}};
double T_right[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{-v,0,0,1}};
double R_up[4][4]={{1,0,0,0},{0,cos(phi),-sin(phi),0},{0,sin(phi),cos(phi),0},{0,0,0,1}};//{{cos(phi),-sin(phi),0,0},{sin(phi),cos(phi),0,0},{0,0,1,0},{0,0,0,1}};
double R_down[4][4]={{1,0,0,0},{0,cos(phi),sin(phi),0},{0,-sin(phi),cos(phi),0},{0,0,0,1}};//{{cos(phi),sin(phi),0,0},{-sin(phi),cos(phi),0,0},{0,0,1,0},{0,0,0,1}};
double R_left[4][4]={{cos(phi),0,-sin(phi),0},{0,1,0,0},{sin(phi),0,cos(phi),0},{0,0,0,1}};
double R_right[4][4]={{cos(phi),0,sin(phi),0},{0,1,0,0},{-sin(phi),0,cos(phi),0},{0,0,0,1}};
 
void umn_matr(double a[4][4], double b[4][4], double c[4][4])// Процедура умножения матриц
{ 
    double s;
    for(int i=0; i<4; i++)
        for(int j=0; j<4; j++)
        {
            c[i][j]=0;
            
            for(int k=0; k<4; k++)
            
            c[i][j]=c[i][j]+a[i][k]*b[k][j];
        }                
}
 
void mcopy(double a[4][4], double b[4][4])
{
    int i,j;
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
            a[i][j]=b[i][j];
}
 
void mprint(double x[4][4])
{
    cout<<endl;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
            cout<<x[i][j]<<"  ";
        cout<<endl;
    }
    cout<<endl;
}
 
void preobr_OE()
{
    int i,j,k; double h;
    for(i=0;i<V;i++)
        for(j=0;j<4;j++)
        {
            SVe[i][j]=0;
            for(k=0;k<4;k++)
                SVe[i][j]+=SV[i][k]*C_oe[k][j];
            
        }
    for(i=0;i<V;i++)
    {
        if(SV[i][3]!=0)
        {
            if(SVe[i][3]>0)
                h=SVe[i][3];
            else
                h=-SVe[i][3];
            for(j=0;j<4;j++)
                SVe[i][j]=floor(SVe[i][j]/h);
        }
    }
}
 
void display()
{
    int k,i,j;
    for(k=0;k<E;k++)
    {
        i=SE[k][0];
        j=SE[k][1];
        line((int)SVe[i][0],(int)SVe[i][1],(int)SVe[j][0],(int)SVe[j][1]);
    }
    cout<<endl;
}
 
void initdata()
{
    double T_mk[4][4];
    umn_matr(C_mn,C_nk,T_mk);
    umn_matr(T_mk,C_ke,C_me);
    initwindow(w_wide,w_heigh);
    setfillstyle(1,BLACK);
    umn_matr(C_om,C_me,C_oe);
    preobr_OE();
    display();
    bool cont=true;
    int code;
    double C_omnew[4][4];
    mprint(T_left);
    mprint(C_omnew);
    umn_matr(T_left,C_om,C_omnew);
    while(cont)
    {
        code=getch();
        if(code==0)
            code=getch();
        if(code==esckey)
            cont=false;
        else
        {
            switch(code)
            {
                case leftkey:{umn_matr(T_left,C_om,C_omnew);} break;
                case rightkey:{umn_matr(T_right,C_om,C_omnew);} break;
                case upkey:{umn_matr(T_up,C_om,C_omnew);} break;
                case downkey:{umn_matr(T_down,C_om,C_omnew);} break;
                case leftnumkey:{umn_matr(C_om,R_left,C_omnew);} break;
                case rightnumkey:{umn_matr(C_om,R_right,C_omnew);} break;
                case upnumkey:{umn_matr(C_om,R_up,C_omnew);} break;
                case downnumkey:{umn_matr(C_om,R_down,C_omnew);} break;
                case leftnumkey1:{umn_matr(T_left,C_om,C_omnew);} break;
                case rightnumkey1:{umn_matr(T_right,C_om,C_omnew);} break;
                case upnumkey1:{umn_matr(T_up,C_om,C_omnew);} break;
                case downnumkey1:{umn_matr(T_down,C_om,C_omnew);} break;
 
            }
            mcopy(C_om,C_omnew);
            umn_matr(C_om,C_me,C_oe);
            preobr_OE();
            bar(0,0,w_wide-1,w_heigh-1);
            display();
        }
    }
    closegraph();
}
int main(int argc, char *argv[])
{
    initdata();
    system("pause");
}
0
Заблокирован
16.05.2016, 19:04 8
Как не пользуется, я пользовался недавно(о библиотеке Graphics).
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
16.05.2016, 19:22 9
А откуда ты эти коды брал? Так попробуй:
C++
1
2
int const leftnumkey1=0x00A9;
int const rightnumkey1=0x00E3;
Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Programmist5 Посмотреть сообщение
я пользовался недавно
Преподаватель помнит живого Сталина?

0
0 / 0 / 0
Регистрация: 31.10.2014
Сообщений: 39
16.05.2016, 19:48  [ТС] 10
Не помогает Странно... Коды отсюда брал http://referatdb.ru/pars_docs/... 115ecb.png
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
16.05.2016, 20:08 11
Например, й - влево, код 169 (0xA9). У тебя почему 130?
0
0 / 0 / 0
Регистрация: 31.10.2014
Сообщений: 39
16.05.2016, 20:15  [ТС] 12
Точно, спасибо что поправили И тем не менее не работает. "Стоит на месте". Где же собака зарыта. Думал, что может это старый проект без изменений всё остаётся, но всё-таки нет, перестраивается...
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
16.05.2016, 20:36 13
А с английскими работает? Сделай тогда вывод кодов getch() и посмотри, что там.
Или просто поставь точку останова на getch() и посмотри.
0
0 / 0 / 0
Регистрация: 31.10.2014
Сообщений: 39
16.05.2016, 21:47  [ТС] 14
С английскими кодами да. Установил курсор в одну из строк switch (с русским кодом), нажал "выполнить до курсора". При нажатии всех кнопок с русской раскладкой реакции нет, а с англ. всё нормально (((

Добавлено через 17 минут
Получается, что когда я нажимаю например на букву "ц", поток ввода или что-то вроде того принимает её не за "ц".

Добавлено через 22 минуты
Я понял, кажется, у меня не предусмотрен ввод кириллицы в консоли. Не знаю, как это исправить. В VS проще, setlocale( LC_ALL, "Russian" ) вставить и всё, а в Dev-CPP не помогает в моём случае.

Добавлено через 12 минут
Всё, с русским проблема решена. И зачем я только с этими кодами связался, проблем только нажил на свою голову Можно же так было, ну как я теперь сделал:
C++
1
2
3
4
case 'й':{umn_matr(C_om,R_left,C_omnew);} break;
case 'у':{umn_matr(C_om,R_right,C_omnew);} break;
case 'ц':{umn_matr(C_om,R_up,C_omnew);} break;
case 'ы':{umn_matr(C_om,R_down,C_omnew);} break;
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,617
17.05.2016, 09:00 15
Надо смотреть отладчиком, что в code после нажатия при включенной русской раскладке. Может, у тебя кодировка 1251 в консоли?
0
0 / 0 / 0
Регистрация: 31.10.2014
Сообщений: 39
17.05.2016, 11:06  [ТС] 16
Реакции на русские буквы нет, насчёт кодировки в консоли искал в настройках среды, но не нашёл. Да ладно, я думаю, что так проще, как я сделал. Хотя да, очень странно, что не работает.
0
17.05.2016, 11:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2016, 11:06
Помогаю со студенческими работами здесь

Как сделать баннер движущийся с контактами?
Просьба подсказать, как мне сделать на подобие &quot;баннер движущийся с контактами.&quot; или как это...

Как правильно сделать движущийся background
Всем привет! Ребята, объясните мне как правильно сделать движущийся background. Задумка такова:...

Как правильно сделать движущийся background
Всем привет! Ребята, объясните мне как правильно сделать движущийся background. Задумка такова:...

Как сделать движущийся круг со сменой цвета
Как сделать круг,чтобы он доходил например до определенного момента с одним цветом и далее шёл с...

Как сделать движущийся квадрат в qbasic (змейку) ?
СРОЧНО НУЖНА ПОМОЩЬ!!!!

написать программу движущийся графический объект с двумя способоми с использованием статического объекта и с использованием динамического объекта
Движение закрашенного прямоугольника по треугольному контуру с изменением цвета при изменении...


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

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

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