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

Вращение кубика вокруг начала координат - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как программно вызвать BSOD? http://www.cyberforum.ru/cpp-beginners/thread823483.html
Привет Собственно вопрос в названии темы: как сделать универсальный код, вызывающий BSOD на WinXP-Win7 или же как сделать фальшивый БСОД: просто картинка на весь экран, чтобы невозможно было вызвать...
C++ Литература для графического интерфейса Здравствуйте, у меня есть вопрос. Вот объясните, например я изучаю С++, но там консольные приложения, а как потом писать оконные? Как можно выучить их? Какая то литература есть или что? Просто я не... http://www.cyberforum.ru/cpp-beginners/thread823475.html
C++ Сетевые библиотеки для DOS
Доброе время суток, знает ли кто-нибудь библиотеки(C++) для работы в сети под дос(и если да, то заодно инструкции к ним), необходимо написать программу для отправки сообщения на e-mail, следовательно...
Нужно чтобы принимал минус перед нулем C++
Если ввести -00043 то работает, а вот если -000000000000000000000000000005353 то нет, потому что берет минус и первые 16 нолей и пишет что больше 16 символов. Как сделать чтобы он так же отбрасывал...
C++ Двойная диспетчеризация :) http://www.cyberforum.ru/cpp-beginners/thread823451.html
Здорова! Я тут от пытаюсь понять такое понятие взаимодействия классов или хз как назвать, вообщем что такое двойная диспетчеризация. Так сказать. 4 статьи как бы так бегло прочитал но никак нимогу...
C++ Матрица переходов. Транслятор Здравствуйте! Пишу курсовик (транслятор с языка С на язык ASM). Подскажите пожалуйста как правильно пользоваться сей вещью (матрица переходов), ибо в методичке ничего толкового не написано. ... подробнее

Показать сообщение отдельно
3def
0 / 0 / 0
Регистрация: 31.03.2013
Сообщений: 20

Вращение кубика вокруг начала координат - C++

01.04.2013, 07:30. Просмотров 970. Ответов 9
Метки (Все метки)

В общем следующая проблема: кубик должен крутиться вокруг начала координат, но он странно искажается и "убегает". Помогите пожалуйста. Делал через матрицы поворота.

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
#include <iostream> 
#include <TxLib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
 
double a=3.1415/90;
double coord[8][3]= {{250, 250, 100},
                     {350, 250, 100},
                     {350, 150, 100},
                     {250, 150, 100},  
                     {250, 250, -100},
                     {350, 250, -100},
                     {350, 150, -100},
                     {250, 150, -100}};
double x[3][3] = {{1, 0, 0},
                   {0, cos(a), sin(a)},
                   {0, -sin(a),cos(a) }};
double y[3][3] = {{cos(a), sin(a), 0},
                   {-sin(a), cos(a), 0},
                   {0, 0, 1}}; 
double z[3][3] = {{cos(a), 0, sin(a)},
                   {0, 1, 0},
                   {-sin(a), 0, cos(a)}};
 
void draw()
{
  txClear();
  
  txSetPixel(coord[0][0]/*+x*/, coord[0][1]/*+y*/, TX_WHITE);
  txSetPixel(coord[1][0]/*+x*/, coord[1][1]/*+y*/, TX_WHITE);
  txSetPixel(coord[2][0]/*+x*/, coord[2][1]/*+y*/, TX_WHITE);
  txSetPixel(coord[3][0]/*+x*/, coord[3][1]/*+y*/, TX_WHITE);
  txSetPixel(coord[4][0]/*+x*/, coord[4][1]/*+y*/, TX_WHITE);
  txSetPixel(coord[5][0]/*+x*/, coord[5][1]/*+y*/, TX_WHITE);
  txSetPixel(coord[6][0]/*+x*/, coord[6][1]/*+y*/, TX_WHITE);
  txSetPixel(coord[7][0]/*+x*/, coord[7][1]/*+y*/, TX_WHITE);
  
  txLine(coord[0][0]/*+x*/, coord[0][1]/*+y*/, coord[1][0]/*+x*/, coord[1][1]/*+y*/);
  txLine(coord[1][0]/*+x*/, coord[1][1]/*+y*/, coord[2][0]/*+x*/, coord[2][1]/*+y*/);
  txLine(coord[2][0]/*+x*/, coord[2][1]/*+y*/, coord[3][0]/*+x*/, coord[3][1]/*+y*/);
  txLine(coord[3][0]/*+x*/, coord[3][1]/*+y*/, coord[0][0]/*+x*/, coord[0][1]/*+y*/);
  txLine(coord[4][0]/*+x*/, coord[4][1]/*+y*/, coord[5][0]/*+x*/, coord[5][1]/*+y*/);
  txLine(coord[5][0]/*+x*/, coord[5][1]/*+y*/, coord[6][0]/*+x*/, coord[6][1]/*+y*/);
  txLine(coord[6][0]/*+x*/, coord[6][1]/*+y*/, coord[7][0]/*+x*/, coord[7][1]/*+y*/);
  txLine(coord[7][0]/*+x*/, coord[7][1]/*+y*/, coord[4][0]/*+x*/, coord[4][1]/*+y*/);
  txLine(coord[0][0]/*+x*/, coord[0][1]/*+y*/, coord[4][0]/*+x*/, coord[4][1]/*+y*/);
  txLine(coord[1][0]/*+x*/, coord[1][1]/*+y*/, coord[5][0]/*+x*/, coord[5][1]/*+y*/);
  txLine(coord[2][0]/*+x*/, coord[2][1]/*+y*/, coord[6][0]/*+x*/, coord[6][1]/*+y*/);
  txLine(coord[3][0]/*+x*/, coord[3][1]/*+y*/, coord[7][0]/*+x*/, coord[7][1]/*+y*/);
}
 
void ox()
{
     a = a+0.5*a;
     for(int n=0; n<8; n++)
     {
                     coord[n][0] = coord[n][0]*x[0][0]+coord[n][1]*x[1][0]+coord[n][2]*x[2][0];
                     coord[n][0] = coord[n][1]*x[0][1]+coord[n][1]*x[1][1]+coord[n][2]*x[2][1];
                     coord[n][0] = coord[n][2]*x[0][2]+coord[n][1]*x[1][2]+coord[n][2]*x[2][2];                     
     }
}
 
void oz()
{
     a = a+0.5*a;
     for(int n=0; n<8; n++)
     {
                     coord[n][0] = coord[n][0]*z[0][0]+coord[n][1]*z[1][0]+coord[n][2]*z[2][0];
                     coord[n][1] = coord[n][1]*z[0][1]+coord[n][1]*z[1][1]+coord[n][2]*z[2][1];
                     coord[n][2] = coord[n][2]*z[0][2]+coord[n][1]*z[1][2]+coord[n][2]*z[2][2];                     
             
     }
}
 
void oy()
{
     a = a+0.5*a;
     for(int n=0; n<8; n++)
     {
             
                     coord[n][0] = coord[n][0]*y[0][0]+coord[n][1]*y[1][0]+coord[n][2]*y[2][0];
                     coord[n][1] = coord[n][1]*y[0][1]+coord[n][1]*y[1][1]+coord[n][2]*y[2][1];
                     coord[n][2] = coord[n][2]*y[0][2]+coord[n][1]*y[1][2]+coord[n][2]*y[2][2];                     
             
     }
}
 
void ox1()
{
     a = a-0.5*a;
     for(int n=0; n<8; n++)
     {
                     coord[n][0] = coord[n][0]*x[0][0]+coord[n][1]*x[1][0]+coord[n][2]*x[2][0];
                     coord[n][1] = coord[n][1]*x[0][1]+coord[n][1]*x[1][1]+coord[n][2]*x[2][1];
                     coord[n][2] = coord[n][2]*x[0][2]+coord[n][1]*x[1][2]+coord[n][2]*x[2][2];                     
     }
}
 
void oz1()
{
     a = a-0.5*a;
     for(int n=0; n<8; n++)
     {
                     coord[n][0] = coord[n][0]*z[0][0]+coord[n][1]*z[1][0]+coord[n][2]*z[2][0];
                     coord[n][1] = coord[n][1]*z[0][1]+coord[n][1]*z[1][1]+coord[n][2]*z[2][1];
                     coord[n][2] = coord[n][2]*z[0][2]+coord[n][1]*z[1][2]+coord[n][2]*z[2][2];                     
             
     }
}
 
void oy1()
{
     a = a-0.5*a;
     for(int n=0; n<8; n++)
     {
             
                     coord[n][0] = coord[n][0]*y[0][0]+coord[n][1]*y[1][0]+coord[n][2]*y[2][0];
                     coord[n][1] = coord[n][1]*y[0][1]+coord[n][1]*y[1][1]+coord[n][2]*y[2][1];
                     coord[n][2] = coord[n][2]*y[0][2]+coord[n][1]*y[1][2]+coord[n][2]*y[2][2];                     
             
     }
}
 
int main()
{
    char c;
txCreateWindow(600, 400);
txSetDefaults();
txSetColor ( TX_WHITE, 3);
txSetFillColor (TX_BLACK);
while(c!=27)
{
             draw();
             if(c == 'w')
             {
                  a = a+0.5*a;
                  ox();
             }
             if(c == 'a')
             {
                  a = a+0.5*a;
                  oy();
             }
             if(c == 'q')
             {
                  a = a+0.5*a;
                  oz();
             }
             if(c == 's')
             {
                  a = a-0.5*a;
                  ox();
             }
             if(c == 'd')
             {
                  a = a-0.5*a;
                  oy();
             }
             if(c == 'e')
             {
                  a = a-0.5*a;
                  oz();
             }
             c = getch();
}
getch();
 
return 0;
}
Добавлено через 2 часа 10 минут
...

Добавлено через 19 часов 53 минуты
Похоже, никто не поможет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru