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

Компьютерная графика. Реализация фигуры додекаэдр - C++

Восстановить пароль Регистрация
 
Бугагашенька
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 23
12.03.2014, 21:55     Компьютерная графика. Реализация фигуры додекаэдр #1
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
class MYAPPLICATION : public APPLICATION_3D
{
  ...
 
   // Начальные координаты мыши
   int mX;
   int mY;
 
   // Изменение координат мыши
   GLfloat rotateX; 
   GLfloat rotateY;
 
  ... 
}
 
 
void MYAPPLICATION::on_mouse(int button, int state, int x, int y)
{
   mX = x;
   mY = y;
}
 
void MYAPPLICATION::on_motion(int x, int y)
{
   rotateX = GLfloat(y - mY); 
   rotateY = GLfloat(x - mX);
   
   glutPostRedisplay();
}
 
void MYAPPLICATION::on_display()
{
 ...
gluLookAt ( 3, 3, 3,     
                  2, 2, 2,      
                    0, 1, 0 );       
   
glTranslatef(1, 1, 1);
glRotatef(rotateX, 1, 1, 1);
glRotatef(rotateY, 1, -1, 1);
   
{
   AXIS axis;
   axis.draw();
}
 ...
}
Реализация фигуры додекаэдр
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
class MYAPPLICATION : public APPLICATION_3D
{
  ...
 
   public:
    ...
 
                    void init_dodec(int x1, int y1, int z1);
     void init_kub(int x1, int y1, int z1, int x2, int y2, int z2);
    ...
   private:
    ...
     VERTEX dodecahedron[59];
}
void MYAPPLICATION::init_dodec(int x1, int y1, int z1) {
       int x2 = x1 + 2;
       int y2 = y1 + 2; 
       int z2 = z1 + 2;
 
       double fi = abs(((1-sqrt(5.0))/2)-1);
    
       VECTOR v1 = {x1+fi, y1+fi, z1+fi};
       VECTOR v2 = {x2-fi, y1+fi, z1+fi};
       VECTOR v3 = {x2-fi, y1+fi, z2-fi};
       VECTOR v4 = {x1+fi, y1+fi, z2-fi};
       VECTOR v5 = {x1+fi, y2-fi, z2-fi};
       VECTOR v6 = {x2-fi, y2-fi, z2-fi};
       VECTOR v7 = {x2-fi, y2-fi, z1+fi};
       VECTOR v8 = {x1+fi, y2-fi, z1+fi};
 
       VECTOR v9 = {x1+(1/fi), (float) y2, (((z2-z1)/2))+z1};
       VECTOR v10 = {x2-(1/fi), (float) y2, (((z2-z1)/2))+z1};
       VECTOR v11 = {x1+(1/fi), (float) y1, (((z2-z1)/2))+z1};
       VECTOR v12 = {x2-(1/fi), (float) y1, (((z2-z1)/2))+z1};
 
       VECTOR v13 = {(float) x1, ((y2-y1)/2)+y1, z2-(1/fi)};
       VECTOR v14 = {(float) x1, ((y2-y1)/2)+y1, z1+(1/fi)};
       VECTOR v15 = {(float) x2, ((y2-y1)/2)+y1, z2-(1/fi)};
       VECTOR v16 = {(float) x2, ((y2-y1)/2)+y1, z1+(1/fi)};
 
       VECTOR v17 = {((x2-x1)/2)+x1, y2-(1/fi), (float)z1};
       VECTOR v18 = {((x2-x1)/2)+x1, y1+(1/fi), (float)z1};
       VECTOR v19 = {((x2-x1)/2)+x1, y2-(1/fi), (float)z2};
       VECTOR v20 = {((x2-x1)/2)+x1, y1+(1/fi), (float)z2};
 
    VERTEX dod[] = {
        {0, v9, 255, 0, 0},         {0, v10, 255, 0, 0},      {0, v4, 255, 0, 0},
     {0, v17, 255, 0, 0},     {0, v3, 255, 0, 0},
        {1, v4, 0, 255, 0},         {1, v17, 0, 255, 0},      {1, v18, 0, 255, 0},
     {1, v5, 0, 255, 0},      {1, v16, 0, 255, 0},
        {2, v10, 0, 0, 255},        {2, v4, 0, 0, 255},       {2, v16, 0, 0, 255},
     {2, v15, 0, 0, 255},     {2, v1, 0, 0, 255},
        {3, v15, 128, 0, 128},    {3, v16, 128, 0, 128},    {3, v5, 128, 0, 128},
     {3, v12, 128, 0, 128},   {3, v8, 128, 0, 128},
        {4, v6, 0, 128, 0},         {4, v18, 0, 128, 0},      {4, v5, 0, 128, 0},
     {4, v12, 0, 128, 0},     {4, v11, 0, 128, 0},
        {5, v7, 255, 240, 255},   {5, v20, 255, 240, 255},  {5, v8, 255, 240, 255},
     {5, v12, 255, 240, 255}, {5, v11, 255, 240, 255},
        {6, v1, 128, 128, 0},       {6, v15, 128, 128, 0},    {6, v8, 128, 128, 0},
     {6, v20, 128, 128, 0},   {6, v19, 128, 128, 0},
        {7, v9, 0, 255, 255},       {7, v10, 0, 255, 255},    {7, v1, 0, 255, 255},
     {7, v19, 0, 255, 255},   {7, v2, 0, 255, 255},
        {8, v2, 255, 0, 128},       {8, v19, 255, 0, 128},    {8, v20, 255, 0, 128},
     {8, v7, 255, 0, 128},    {8, v13, 255, 0, 128},
        {9, v7, 128, 0, 0},         {9, v11, 128, 0, 0},      {9, v6, 128, 0, 0},
     {9, v14, 128, 0, 0},     {9, v13, 128, 0, 0},
        {10, v13, 128, 128, 255}, {10, v14, 128, 128, 255}, {10, v3, 128, 128, 255},
     {10, v9, 128, 128, 255}, {10, v2, 128, 128, 255},
        {11, v3, 128, 128, 0},    {11, v17, 128, 128, 0},   {11, v18, 128, 128, 0},
     {11, v6, 128, 128, 0},   {11, v14, 128, 128, 0}
    };
 
    for (int i = 0; i < 60; i++) {
        dodecahedron[i] = dod[i];
    }
}
Есть такая строчка в коде VERTEX dodecahedron[59]; Почему 59?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2014, 21:55     Компьютерная графика. Реализация фигуры додекаэдр
Посмотрите здесь:

Компьютерная графика и анимация C++
Компьютерная графика 3D. C++
Компьютерная графика в c++ C++
C++ Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе
C++ Компьютерная графика
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dogg12
 Аватар для dogg12
57 / 23 / 5
Регистрация: 21.02.2011
Сообщений: 506
12.03.2014, 22:06     Компьютерная графика. Реализация фигуры додекаэдр #2
Бугагашенька, какая цель данного поста? если у вас есть конкретные вопросы, то напишите об этом, а вы прост окод кинули...
Бугагашенька
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 23
12.03.2014, 22:18  [ТС]     Компьютерная графика. Реализация фигуры додекаэдр #3
у меня задание построить додекаэдр на языке C++, я его не знаю.
Тут находим вершины додекаэдра
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
VECTOR v1 = {x1+fi, y1+fi, z1+fi};
       VECTOR v2 = {x2-fi, y1+fi, z1+fi};
       VECTOR v3 = {x2-fi, y1+fi, z2-fi};
       VECTOR v4 = {x1+fi, y1+fi, z2-fi};
       VECTOR v5 = {x1+fi, y2-fi, z2-fi};
       VECTOR v6 = {x2-fi, y2-fi, z2-fi};
       VECTOR v7 = {x2-fi, y2-fi, z1+fi};
       VECTOR v8 = {x1+fi, y2-fi, z1+fi};
 
       VECTOR v9 = {x1+(1/fi), (float) y2, (((z2-z1)/2))+z1};
       VECTOR v10 = {x2-(1/fi), (float) y2, (((z2-z1)/2))+z1};
       VECTOR v11 = {x1+(1/fi), (float) y1, (((z2-z1)/2))+z1};
       VECTOR v12 = {x2-(1/fi), (float) y1, (((z2-z1)/2))+z1};
 
       VECTOR v13 = {(float) x1, ((y2-y1)/2)+y1, z2-(1/fi)};
       VECTOR v14 = {(float) x1, ((y2-y1)/2)+y1, z1+(1/fi)};
       VECTOR v15 = {(float) x2, ((y2-y1)/2)+y1, z2-(1/fi)};
       VECTOR v16 = {(float) x2, ((y2-y1)/2)+y1, z1+(1/fi)};
 
       VECTOR v17 = {((x2-x1)/2)+x1, y2-(1/fi), (float)z1};
       VECTOR v18 = {((x2-x1)/2)+x1, y1+(1/fi), (float)z1};
       VECTOR v19 = {((x2-x1)/2)+x1, y2-(1/fi), (float)z2};
       VECTOR v20 = {((x2-x1)/2)+x1, y1+(1/fi), (float)z2};
тут мы указываем грань, вершину и цвет этой вершины
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
VERTEX dod[] = {
        {0, v9, 255, 0, 0},         {0, v10, 255, 0, 0},      {0, v4, 255, 0, 0},
     {0, v17, 255, 0, 0},     {0, v3, 255, 0, 0},
        {1, v4, 0, 255, 0},         {1, v17, 0, 255, 0},      {1, v18, 0, 255, 0},
     {1, v5, 0, 255, 0},      {1, v16, 0, 255, 0},
        {2, v10, 0, 0, 255},        {2, v4, 0, 0, 255},       {2, v16, 0, 0, 255},
     {2, v15, 0, 0, 255},     {2, v1, 0, 0, 255},
        {3, v15, 128, 0, 128},    {3, v16, 128, 0, 128},    {3, v5, 128, 0, 128},
     {3, v12, 128, 0, 128},   {3, v8, 128, 0, 128},
        {4, v6, 0, 128, 0},         {4, v18, 0, 128, 0},      {4, v5, 0, 128, 0},
     {4, v12, 0, 128, 0},     {4, v11, 0, 128, 0},
        {5, v7, 255, 240, 255},   {5, v20, 255, 240, 255},  {5, v8, 255, 240, 255},
     {5, v12, 255, 240, 255}, {5, v11, 255, 240, 255},
        {6, v1, 128, 128, 0},       {6, v15, 128, 128, 0},    {6, v8, 128, 128, 0},
     {6, v20, 128, 128, 0},   {6, v19, 128, 128, 0},
        {7, v9, 0, 255, 255},       {7, v10, 0, 255, 255},    {7, v1, 0, 255, 255},
     {7, v19, 0, 255, 255},   {7, v2, 0, 255, 255},
        {8, v2, 255, 0, 128},       {8, v19, 255, 0, 128},    {8, v20, 255, 0, 128},
     {8, v7, 255, 0, 128},    {8, v13, 255, 0, 128},
        {9, v7, 128, 0, 0},         {9, v11, 128, 0, 0},      {9, v6, 128, 0, 0},
     {9, v14, 128, 0, 0},     {9, v13, 128, 0, 0},
        {10, v13, 128, 128, 255}, {10, v14, 128, 128, 255}, {10, v3, 128, 128, 255},
     {10, v9, 128, 128, 255}, {10, v2, 128, 128, 255},
        {11, v3, 128, 128, 0},    {11, v17, 128, 128, 0},   {11, v18, 128, 128, 0},
     {11, v6, 128, 128, 0},   {11, v14, 128, 128, 0}
    };
например {0, v9, 255, 0, 0} - 0 это грань, v9 вершина, (255,0,0) цвет вершины. Грань состоит из 5 вершин.
У меня вопрос по этой строчке VERTEX dodecahedron[59];. Я думаю что это массив вершин, но почему 59?
iUser
 Аватар для iUser
449 / 29 / 1
Регистрация: 07.01.2014
Сообщений: 124
12.03.2014, 22:47     Компьютерная графика. Реализация фигуры додекаэдр #4
Цитата Сообщение от dogg12 Посмотреть сообщение
если у вас есть конкретные вопросы, то напишите об этом
Вопрос таки есть:
Цитата Сообщение от Бугагашенька Посмотреть сообщение
Почему 59?
Добавлено через 23 минуты
Цитата Сообщение от Бугагашенька Посмотреть сообщение
C++
1
VERTEX dodecahedron[59]
Здесь dodecahedron содержит 59 элементов.
Цитата Сообщение от Бугагашенька Посмотреть сообщение
C++
1
2
3
for (int i = 0; i < 60; i++) {
dodecahedron[i] = dod[i];
}
А здесь уже 60 элементов.

Пробовали заменить 59 на 60?

Добавлено через 3 минуты

Не по теме:

Не силен в C++ и геометрии. Может быть поэтому напрашивается 60.

Yandex
Объявления
12.03.2014, 22:47     Компьютерная графика. Реализация фигуры додекаэдр
Ответ Создать тему
Опции темы

Текущее время: 06:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru