С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
#1

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

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

Что требуется: Выполнить кручение куба в виде каркаса по оси Z.
Язык выполнения - любой, единственное ограничение - не использовать OpenGL
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2010, 11:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание крутящегося каркасного куба (C++):

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

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

Построение 3D куба - C++ Builder
Здравствуйте! Вопрос вот в чём: как в Embarcadero RAD Studio XE C++ замутить кубик посредством OpenGL или DirectX? Важно, чтобы его...

Задачка: Объем куба - C++ Builder
Составить программу для решения текстовой задачи Дана длина ребра куба. Найти площадь грани, площадь полной поверхности и объем этого...

Соединить точки 3D Куба в BuilderC++ - C++ Builder
Собственно такое задание: Создать 3D куб или любую другую фигуру без использование OpenGl + поворот фигуры за счет нажатия и удержание ЛКМ....

Визуализация проволочной модели куба - C++ Builder
Есть программа,которую нужно проверить в билдере на дееспособность -___- помогите,пожалуйста /*Проволочная модель куба*/ ...

6
Зоти Сергей
228 / 226 / 13
Регистрация: 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
Зоти Сергей
228 / 226 / 13
Регистрация: 18.12.2009
Сообщений: 316
10.03.2010, 14:19 #3
Вот, проект, короче, на всякий случай.
1
Вложения
Тип файла: rar DrawCube3d.rar (177.9 Кб, 100 просмотров)
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
10.03.2010, 17:56  [ТС] #4
Это здорово, и я готов сказать "Спасибо", т.к. это приближает меня к конечной цели, но есть некоторая поправка - Должны быть оси координат, а кручение куба должно быть реализовано в виде анимации, причем куб должен крутиться вокруг оси Z.
Примерно так
0
Миниатюры
Создание крутящегося каркасного куба  
Зоти Сергей
228 / 226 / 13
Регистрация: 18.12.2009
Сообщений: 316
10.03.2010, 21:41 #5
Вот переделал немного.
Так пойдет?
1
Вложения
Тип файла: rar DrawCube3d.rar (163.7 Кб, 70 просмотров)
Зоти Сергей
228 / 226 / 13
Регистрация: 18.12.2009
Сообщений: 316
11.03.2010, 11:26 #6
Цитата Сообщение от Darky
в данном случае в качестве оси Z выступает ось, направленная вверх.
Вы не могли бы подсказать, как сменить ось вращения на ту, что находится вверху?
было
RotateCube(0, 0, Angle);

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

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

Во вложенном изменения.
2
Вложения
Тип файла: rar DrawCube3d.rar (163.8 Кб, 84 просмотров)
Зоти Сергей
228 / 226 / 13
Регистрация: 18.12.2009
Сообщений: 316
24.03.2010, 14:21 #7
Сделал пирамиду. как просили.
1
Вложения
Тип файла: rar DrawCube3d.rar (163.3 Кб, 64 просмотров)
24.03.2010, 14:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2010, 14:21
Привет! Вот еще темы с ответами:

Вращение куба - C++
Возникают проблемы с циклами поворотов.Куб рисуется не полностью .Если кому -нибудь не сложно , подскажите в чем проблема. Часть программы...

Вращения куба - C++
Куб должен быть с закрашенными сторонами. Вращения по x,y,z. Помогите!!!

Вычисление объема куба - C++
Вычисление объема куба. Введите длину ребра (см) и нажмите &lt;Enter&gt; -&gt; 9.5 * Объем куба: 857.38 куб.см. можно со скрином...

Найти объем куба - C++
как писать?? Дана длина ребра куба a. Найти объем куба V = a3 и площадь его поверхности S = 6·a2??


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.