Форум программистов, компьютерный форум 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). Подскажите пожалуйста как правильно пользоваться сей вещью (матрица переходов), ибо в методичке ничего толкового не написано. ... подробнее

Показать сообщение отдельно
SDev
43 / 41 / 10
Регистрация: 15.03.2013
Сообщений: 89
04.04.2013, 04:45
сейчас вращает правильно.
клавиши: 'x' вокруг оси X, 'y' вокруг Y, 'z'-Z
чтобы увидеть трехмерность чередуй вращения по разным осям. в исходном положении ось Z смотрит в экран.
ошибка была в функциях пересчета ox(),oy(),oz()
старые координаты затирались раньше времени, хотя использовались в каждой формуле пересчета.
я добавил фигуру симметричную относительно начала координат, чтобы не уходила от центра осей.
можешь раскомментировать исходную фигуру, у нее амплитуда вращения побольше.

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
#include <iostream> 
#include <TxLib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
double pi = 3.1415926535;
double h=pi/8;
double a=0,b=0,g=0;
/*
double coord[8][3]= {{50, 150, 100},
                     {150, 150, 100},
                     {150, 50, 100},
                     {50, 50, 100},  
                     {50, 150, 00},
                     {150, 150, 00},
                     {150, 50, 00},
                     {50, 50, 00}};
*/
 
 
double coord[8][3]= {{-20, 20, 100},
                     {20, 20, 100},
                     {20, -20, 100},
                     {-20, -20, 100},  
                     {-20, 20, -100},
                     {20, 20, -100},
                     {20, -20, -100},
                     {-20, -20, -100}};
 
double coord1[8][3];
 
double x[3][3] = {{1, 0, 0},
                   {0, cos(a), sin(a)},
                   {0, -sin(a),cos(a) }};
double z[3][3] = {{cos(a), sin(a), 0},
                   {-sin(a), cos(a), 0},
                   {0, 0, 1}}; 
double y[3][3] = {{cos(a), 0, sin(a)},
                   {0, 1, 0},
                   {-sin(a), 0, cos(a)}};
 
void draw()
{
  txClear();
  for(int n=0; n<8; n++)
  {
   coord1[n][0] = 200+coord[n][0];
   coord1[n][1] = 200+coord[n][1];
   coord1[n][2] = 200+coord[n][2];
  }
 
  txSetPixel(coord1[0][0]/*+x*/, coord1[0][1]/*+y*/, TX_WHITE);
  txSetPixel(coord1[1][0]/*+x*/, coord1[1][1]/*+y*/, TX_WHITE);
  txSetPixel(coord1[2][0]/*+x*/, coord1[2][1]/*+y*/, TX_WHITE);
  txSetPixel(coord1[3][0]/*+x*/, coord1[3][1]/*+y*/, TX_WHITE);
  txSetPixel(coord1[4][0]/*+x*/, coord1[4][1]/*+y*/, TX_WHITE);
  txSetPixel(coord1[5][0]/*+x*/, coord1[5][1]/*+y*/, TX_WHITE);
  txSetPixel(coord1[6][0]/*+x*/, coord1[6][1]/*+y*/, TX_WHITE);
  txSetPixel(coord1[7][0]/*+x*/, coord1[7][1]/*+y*/, TX_WHITE);
  
  txLine(coord1[0][0]/*+x*/, coord1[0][1]/*+y*/, coord1[1][0]/*+x*/, coord1[1][1]/*+y*/);
  txLine(coord1[1][0]/*+x*/, coord1[1][1]/*+y*/, coord1[2][0]/*+x*/, coord1[2][1]/*+y*/);
  txLine(coord1[2][0]/*+x*/, coord1[2][1]/*+y*/, coord1[3][0]/*+x*/, coord1[3][1]/*+y*/);
  txLine(coord1[3][0]/*+x*/, coord1[3][1]/*+y*/, coord1[0][0]/*+x*/, coord1[0][1]/*+y*/);
  txLine(coord1[4][0]/*+x*/, coord1[4][1]/*+y*/, coord1[5][0]/*+x*/, coord1[5][1]/*+y*/);
  txLine(coord1[5][0]/*+x*/, coord1[5][1]/*+y*/, coord1[6][0]/*+x*/, coord1[6][1]/*+y*/);
  txLine(coord1[6][0]/*+x*/, coord1[6][1]/*+y*/, coord1[7][0]/*+x*/, coord1[7][1]/*+y*/);
  txLine(coord1[7][0]/*+x*/, coord1[7][1]/*+y*/, coord1[4][0]/*+x*/, coord1[4][1]/*+y*/);
  txLine(coord1[0][0]/*+x*/, coord1[0][1]/*+y*/, coord1[4][0]/*+x*/, coord1[4][1]/*+y*/);
  txLine(coord1[1][0]/*+x*/, coord1[1][1]/*+y*/, coord1[5][0]/*+x*/, coord1[5][1]/*+y*/);
  txLine(coord1[2][0]/*+x*/, coord1[2][1]/*+y*/, coord1[6][0]/*+x*/, coord1[6][1]/*+y*/);
  txLine(coord1[3][0]/*+x*/, coord1[3][1]/*+y*/, coord1[7][0]/*+x*/, coord1[7][1]/*+y*/);
}
 
void calcMatr(double a,double b,double g)
{
 x[0][0] = 1; x[0][1] =  0;     x[0][2] =  0;
 x[1][0] = 0; x[1][1] = cos(a); x[1][2] = sin(a);
 x[2][0] = 0; x[2][1] =-sin(a); x[2][2] = cos(a);
 
 z[0][0]= cos(b);  z[0][1]= sin(b); z[0][2]= 0;
 z[1][0]= -sin(b); z[1][1]= cos(b); z[1][2]= 0;
 z[2][0]= 0;       z[2][1]= 0;      z[2][2]= 1;
 
 y[0][0] = cos(g);  y[0][1] =  0; y[0][2] = sin(g);
 y[1][0] = 0;       y[1][1] = 1;  y[1][2] = 0;
 y[2][0] = -sin(g); y[2][1] =  0; y[2][2] =cos(g);
 
}
 
void ox()
{ 
    double xx,yy,zz;
     calcMatr( a,b,g);
     for(int n=0; n<8; n++)
     {
                     xx = coord[n][0]*x[0][0]+coord[n][1]*x[1][0]+coord[n][2]*x[2][0];
                     yy = coord[n][0]*x[0][1]+coord[n][1]*x[1][1]+coord[n][2]*x[2][1];
                     zz = coord[n][0]*x[0][2]+coord[n][1]*x[1][2]+coord[n][2]*x[2][2];                     
                     coord[n][0] = xx;
                     coord[n][1] = yy;
                     coord[n][2] = zz;  
     }
}
 
void oz()
{
       //calcMatr( a,b,g);
       double cb=cos(b);
       double sb=sin(b);
       double xx,yy;
     for(int n=0; n<8; n++)
     {
                     xx = coord[n][0]*cb+coord[n][1]*sb;
                     yy = -coord[n][0]*sb+coord[n][1]*cb;
                     coord[n][0]=xx;
                     coord[n][1]=yy;
                     //coord[n][2] = coord[n][2];                     
             
     }
}
 
void oy()
{
    double xx,yy,zz;
   calcMatr( a,b,g);
     for(int n=0; n<8; n++)
     {
           xx = coord[n][0]*y[0][0]+coord[n][1]*y[1][0]+coord[n][2]*y[2][0];
           yy = coord[n][0]*y[0][1]+coord[n][1]*y[1][1]+coord[n][2]*y[2][1];
           zz = coord[n][0]*y[0][2]+coord[n][1]*y[1][2]+coord[n][2]*y[2][2]; 
           coord[n][0] = xx;
           coord[n][1] = yy;
           coord[n][2] = zz;    
     }
}
 
int main()
{
    int c;
txCreateWindow(600, 600);
txSetDefaults();
txSetColor ( TX_WHITE, 3);
txSetFillColor (TX_BLACK);
c=0;
draw();
while(c!=27)
{
      
             if(c == 'x')
             {
                  a=h;b=g=0;
                  ox();
             }
           
             if(c == 'z')
             {
                 
                 a=g=0;
                 b=h;
                 oz();
             }
             
             if(c == 'y')
             {
                
                 a=b=0;
                 g=h;
                  oy();
             }
                        
             draw();
             c = getch();
}
getch();
return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru