Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
Быдлокодер
512 / 298 / 85
Регистрация: 22.11.2009
Сообщений: 892
1

Создание крутящегося каркасного куба

10.03.2010, 11:30. Показов 3473. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Что требуется: Выполнить кручение куба в виде каркаса по оси Z.
Язык выполнения - любой, единственное ограничение - не использовать OpenGL
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2010, 11:30
Ответы с готовыми решениями:

Создание вращающегося куба и параллелепипеда
Создать вращающийся куб и параллелепипед, помогите пожалуйста, куб и параллелепипед могу...

Создание куба и его вращение в компоненте Image или Shape
Кто нить может подсказать как связать грани куба так чтобы его можно было вращать по вертикали и...

Создание куба и его вращение в компоненте Image или Shape
Кто нить может подсказать как связать грани куба так чтобы его можно было вращать по вертикали и...

Создание и вращение куба курсором
Здравствуйте, возникла следующая задача: осуществить поворот куба в соответствии движения курсора...

6
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
10.03.2010, 14:11 2
Ну.. вот так как-то...
Написал на билдере. Если надо выложу проект..
Если чего не понятно - спрашивайте.
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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <complex.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
typedef complex<double>Complex;
struct C3DPoint
{
        double x;
        double y;
        double z;
};
//---------------------------------------------------------------------------
struct CCube
{
        C3DPoint Points[8];
};
//---------------------------------------------------------------------------
CCube Cube;
void InitCube()
{
        Cube.Points[0].x=-100;
        Cube.Points[0].y=-100;
        Cube.Points[0].z=-100;
        Cube.Points[1].x= 100;
        Cube.Points[1].y=-100;
        Cube.Points[1].z=-100;
        Cube.Points[2].x= 100;
        Cube.Points[2].y= 100;
        Cube.Points[2].z=-100;
        Cube.Points[3].x=-100;
        Cube.Points[3].y= 100;
        Cube.Points[3].z=-100;
        Cube.Points[4].x=-100;
        Cube.Points[4].y=-100;
        Cube.Points[4].z= 100;
        Cube.Points[5].x= 100;
        Cube.Points[5].y=-100;
        Cube.Points[5].z= 100;
        Cube.Points[6].x= 100;
        Cube.Points[6].y= 100;
        Cube.Points[6].z= 100;
        Cube.Points[7].x=-100;
        Cube.Points[7].y= 100;
        Cube.Points[7].z= 100;
}
//---------------------------------------------------------------------------
void RotateCube(double XAngle, double YAngle, double ZAngle)
{
        double Angle;
        Complex CurCoord;
        for(int i=0;i<8;i++)
        {
                Angle =  -(M_PI * XAngle) / 180;
                CurCoord=Complex(Cube.Points[i].y,Cube.Points[i].z);
                CurCoord*=std::polar(1.0, Angle);
                Cube.Points[i].y=real(CurCoord);
                Cube.Points[i].z=imag(CurCoord);
        }
 
        for(int i=0;i<8;i++)
        {
                Angle =  -(M_PI * YAngle) / 180;
                CurCoord=Complex(Cube.Points[i].x,Cube.Points[i].z);
                CurCoord*=std::polar(1.0, Angle);
                Cube.Points[i].x=real(CurCoord);
                Cube.Points[i].z=imag(CurCoord);
        }
 
        for(int i=0;i<8;i++)
        {
                Angle =  -(M_PI * ZAngle) / 180;
                CurCoord=Complex(Cube.Points[i].x,Cube.Points[i].y);
                CurCoord*=std::polar(1.0, Angle);
                Cube.Points[i].x=real(CurCoord);
                Cube.Points[i].y=imag(CurCoord);
        }
}
//---------------------------------------------------------------------------
void DrawCube(TCanvas * Canvas)
{
        TRect Rect = Canvas->ClipRect;
        Canvas->Brush->Color=clInfoBk;
        Canvas->FillRect(Rect);
        Canvas->Pen->Color=clRed;
        int HalfX=Rect.Width()/2;
        int HalfY=Rect.Height()/2;
        Canvas->MoveTo(HalfX+Cube.Points[0].x,HalfY+Cube.Points[0].y);
        for(int i=1;i<4;i++)
                Canvas->LineTo(HalfX+Cube.Points[i].x,HalfY+Cube.Points[i].y);
        Canvas->LineTo(HalfX+Cube.Points[0].x,HalfY+Cube.Points[0].y);
        Canvas->MoveTo(HalfX+Cube.Points[4].x,HalfY+Cube.Points[4].y);
        for(int i=4;i<8;i++)
                Canvas->LineTo(HalfX+Cube.Points[i].x,HalfY+Cube.Points[i].y);
        Canvas->LineTo(HalfX+Cube.Points[4].x,HalfY+Cube.Points[4].y);
        for(int i=0;i<4;i++)
        {
                Canvas->MoveTo(HalfX+Cube.Points[i].x,HalfY+Cube.Points[i].y);
                Canvas->LineTo(HalfX+Cube.Points[i+4].x,HalfY+Cube.Points[i+4].y);
        }
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        InitCube();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
        static int LastPos=TrackBar1->Position;
        RotateCube(LastPos-TrackBar1->Position, 0, 0);
        DrawCube(Image1->Canvas);
        LastPos=TrackBar1->Position;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar2Change(TObject *Sender)
{
        static int LastPos=TrackBar2->Position;
        RotateCube(0, LastPos-TrackBar2->Position, 0);
        DrawCube(Image1->Canvas);
        LastPos=TrackBar2->Position;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar3Change(TObject *Sender)
{
        static int LastPos=TrackBar3->Position;
        RotateCube(0, 0, LastPos-TrackBar3->Position);
        DrawCube(Image1->Canvas);
        LastPos=TrackBar3->Position;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
        DrawCube(Image1->Canvas);
}
//---------------------------------------------------------------------------
1
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
10.03.2010, 14:19 3
Вот, проект, короче, на всякий случай.
Вложения
Тип файла: rar DrawCube3d.rar (177.9 Кб, 117 просмотров)
1
Быдлокодер
512 / 298 / 85
Регистрация: 22.11.2009
Сообщений: 892
10.03.2010, 17:56  [ТС] 4
Это здорово, и я готов сказать "Спасибо", т.к. это приближает меня к конечной цели, но есть некоторая поправка - Должны быть оси координат, а кручение куба должно быть реализовано в виде анимации, причем куб должен крутиться вокруг оси Z.
Примерно так
Миниатюры
Создание крутящегося каркасного куба  
0
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
10.03.2010, 21:41 5
Вот переделал немного.
Так пойдет?
Вложения
Тип файла: rar DrawCube3d.rar (163.7 Кб, 84 просмотров)
1
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
11.03.2010, 11:26 6
Цитата Сообщение от Darky
в данном случае в качестве оси Z выступает ось, направленная вверх.
Вы не могли бы подсказать, как сменить ось вращения на ту, что находится вверху?
было
RotateCube(0, 0, Angle);

надо
RotateCube(0, Angle, 0);

Только это не Z a Y

Во вложенном изменения.
Вложения
Тип файла: rar DrawCube3d.rar (163.8 Кб, 105 просмотров)
2
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
24.03.2010, 14:21 7
Сделал пирамиду. как просили.
Вложения
Тип файла: rar DrawCube3d.rar (163.3 Кб, 77 просмотров)
1
24.03.2010, 14:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2010, 14:21
Помогаю со студенческими работами здесь

Создание таблицы для многомерного куба
Добрый день участники форума! Подскажите пожалуйста, как создать фот такую таблицу, из каких...

Создание куба OLAP в excel 2010
Помогите, пожалуйста, с созданием куба в excel 2010

Создание OLAP куба. Не могу развернуть базу
Привет всем.. Помогите пожалуйста. Есть база данных Univer на основе которой я создаю олап-куб.....

Оператор case: Вычислить объем V куба либо длину ребра куба a
Вычислить объем V куба, если задана длина его ребра a, либо длину ребра куба a, если задан его...

Ребро куба. Найти объем куба и площадь его боковой поверхности
Дана длина ребра куба. Найти объем куба и площадь его боковой поверхности.

Дана длина ребра куба a. Найти объем куба и площадь его поверхности
Дана длина ребра куба a. Найти объем куба и площадь его поверхности .


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

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