Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 30.09.2014
Сообщений: 4

Нарисовать вращающийся куб

10.01.2015, 21:40. Показов 3002. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем Привет!. Кто может помочь с кубом?. нужен вращающийся куб.я пыталась. но до вращения так и не доходит. пока куб просто при переотрисовке стирает поочередно свои грани. подскажите хоть в чем может быть проблема.

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
179
180
181
182
183
184
185
186
#pragma once
 
namespace Kub14 {
 
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    using namespace System::Threading;
 
    int mass[8][4] = { 
        { 0,   0,    100,   1 },
        { 0,   100,  100,   1 },
        { 100, 100,  100,   1 },
        { 100, 0,    100,   1 },
        { 0,   0,    0,     1 },
        { 0,   100,  0,     1 },
        { 100, 100,  0,     1 },
        { 100, 0,    0,     1 } };
    
    double x[8];
    float y[8];
    int mpr[4][4];
    double a=0.017;
    int mkon[8][4] = {
        { -(System::Math::Cos(a)), System::Math::Sin(a), 0, 0 },
        { System::Math::Sin(a),    System::Math::Cos(a), 0, 0 },
        { 0,                       -1,                   0, 0 },
        { 0,                       0,                    0, 1 } };
 
    double summ;
    
    double w = System::Math::Cos(3.14/6);
    double w1 = System::Math::Sin(3.14/6);
 
    /// <summary>
    /// Сводка для MyForm
    /// </summary>
    public ref class MyForm : public System::Windows::Forms::Form
    {
    public:
        MyForm(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
        }
 
    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~MyForm()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::PictureBox^  pictureBox1;
    private: System::Windows::Forms::Button^  button1;
    private: System::Windows::Forms::Button^  button2;
 
 
 
 
 
 
    protected:
 
    private:
        /// <summary>
        /// Требуется переменная конструктора.
        /// </summary>
        System::ComponentModel::Container ^components;
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        void InitializeComponent(void)
        {
            this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->button2 = (gcnew System::Windows::Forms::Button());
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->BeginInit();
            this->SuspendLayout();
            // 
            // pictureBox1
            // 
            this->pictureBox1->Location = System::Drawing::Point(1, 1);
            this->pictureBox1->Name = L"pictureBox1";
            this->pictureBox1->Size = System::Drawing::Size(513, 477);
            this->pictureBox1->TabIndex = 0;
            this->pictureBox1->TabStop = false;
            this->pictureBox1->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &MyForm::pictureBox1_Paint);
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(520, 60);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(75, 23);
            this->button1->TabIndex = 1;
            this->button1->Text = L"Крутить";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click);
            // 
            // button2
            // 
            this->button2->Location = System::Drawing::Point(520, 31);
            this->button2->Name = L"button2";
            this->button2->Size = System::Drawing::Size(75, 23);
            this->button2->TabIndex = 2;
            this->button2->Text = L"Рисовать";
            this->button2->UseVisualStyleBackColor = true;
            this->button2->Click += gcnew System::EventHandler(this, &MyForm::button2_Click);
            // 
            // MyForm
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(607, 490);
            this->Controls->Add(this->button2);
            this->Controls->Add(this->button1);
            this->Controls->Add(this->pictureBox1);
            this->Name = L"MyForm";
            this->Text = L"MyForm";
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->EndInit();
            this->ResumeLayout(false);
 
        }
#pragma endregion
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
                
 
                 for (int i = 0; i < 8; i++){
                     x[i] = mass[i][1] * w - mass[i][0] * w + 200;
                     y[i] = -(mass[i][2] - mass[i][0] * w1 - mass[i][1] * w1) + 200;
                 }
                 pictureBox1->Refresh();
    }
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                
                     
                    for (int i = 0; i < 8; i++){
                         for (int j = 0; j < 4; j++){
                             summ = 0;
                             for(int k = 0; k < 4; k++){
                                 summ += mass[i][k] * mpr[k][j];
                             }
                             mkon[i][j] = summ;
                         }
                     }
                    while (a < 6.28){
                        for (int i = 0; i < 8; i++){
                            x[i] = mkon[i][1] * w - mkon[i][0] * w + 200;
                            y[i] = -(mkon[i][2] - mkon[i][0] * w1 - mkon[i][1] * w1) + 200;
                            pictureBox1->Refresh();
                            Thread::Sleep(2000);
                        }
                        a += 0.1;
                    }
 
    }
    private: System::Void pictureBox1_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) {
 
                     e->Graphics->DrawLine(System::Drawing::Pens::Black, х[0], y[0], x[1], y[1]);
                     e->Graphics->DrawLine(System::Drawing::Pens::Black, x[0], y[0], x[3], y[3]);
                     e->Graphics->DrawLine(System::Drawing::Pens::Black, x[0], y[0], x[4], y[4]);
                     e->Graphics->DrawLine(System::Drawing::Pens::Black, x[1], y[1], x[2], y[2]);
                     e->Graphics->DrawLine(System::Drawing::Pens::Black, x[1], y[1], x[5], y[5]);
                     e->Graphics->DrawLine(System::Drawing::Pens::Black, x[2], y[2], x[3], y[3]);
                     e->Graphics->DrawLine(System::Drawing::Pens::Black, x[2], y[2], x[6], y[6]);
                     e->Graphics->DrawLine(System::Drawing::Pens::Black, x[3], y[3], x[7], y[7]);
                     e->Graphics->DrawLine(System::Drawing::Pens::Black, x[4], y[4], x[5], y[5]);
                     e->Graphics->DrawLine(System::Drawing::Pens::Black, x[4], y[4], x[7], y[7]);
                     e->Graphics->DrawLine(System::Drawing::Pens::Black, x[5], y[5], x[6], y[6]);
                     e->Graphics->DrawLine(System::Drawing::Pens::Black, x[6], y[6], x[7], y[7]);
                 
}
};
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.01.2015, 21:40
Ответы с готовыми решениями:

Нарисовать вращающийся многоугольник с n вершинами, расположенными на окружности радиусом r
Добрый день всем! Задание таково: написать программу, в которой пользователь вводит значения n и r, нарисовать вращающийся многоугольник с...

Вращающийся куб
Почему куба вообще нет? Как исправить? uses GraphABC; const n = 8; R = 1; W = 500; H = 500; Dist = 10;

Вращающийся куб
Итак здравствуйте!!! В интеренете есть куча исходников этого &quot;вращающегося куба&quot;, многме из них я уже скачивал и просматривал. и при...

6
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
10.01.2015, 23:29
Цитата Сообщение от ЕЗ Посмотреть сообщение
нужен вращающийся куб.я пыталась. но до вращения так и не доходит.
Какие дополнительные библиотеки можно использовать?
0
0 / 0 / 0
Регистрация: 30.09.2014
Сообщений: 4
11.01.2015, 09:56  [ТС]
Добавлено через 34 секунды
да вроде без ограничений главное что бы куб в итоге был в 2D. использовать openGL и DirectX нельзя
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
11.01.2015, 10:28
Цитата Сообщение от ЕЗ Посмотреть сообщение
главное что бы куб в итоге был в 2D.
Но ведь куб в 2D это просто квадрат.

P.S. Прикрепите проект,так будет проще помочь.
0
0 / 0 / 0
Регистрация: 30.09.2014
Сообщений: 4
11.01.2015, 14:52  [ТС]
суть в том что бы с 3D перевести в 2D в изометрии. и тогда получиться куб. это делается по формуле.
C++
1
2
x[i] = mkon[i][1] * w - mkon[i][0] * w + 200;
y[i] = -(mkon[i][2] - mkon[i][0] * w1 - mkon[i][1] * w1) + 200;
подскажите как проект прикрепить
0
11.01.2015, 15:13

Не по теме:

Цитата Сообщение от ЕЗ Посмотреть сообщение
подскажите как проект прикрепить
Нажимайте на кнопку "расширенный режим"(рядом с отправить быстрый ответ). Затем прикрепляете файл-архив в управлении вложениями(кнопка под редактором формул в дополнительных опциях).

0
0 / 0 / 0
Регистрация: 30.09.2014
Сообщений: 4
11.01.2015, 15:38  [ТС]
Вот проект
Вложения
Тип файла: 7z Kub14.7z (3.16 Мб, 75 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2015, 15:38
Помогаю со студенческими работами здесь

Вращающийся куб
вот сам куб, нарисованный на PaintBox как заставить его вращаться, например в лево или в право? procedure TForm1.BitBtn1Click(Sender:...

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

Вращающийся куб с кнопками управления
Есть вот такая штука - смотреть. По этой флешке у меня два вопроса. 1) Изначально было 7 кнопок (которые внизу, под кубом). При...

Вращающийся куб, управление стрелками
Народ! Нужно сделать вращающийся куб, управление стрелками. Я видел исходник там был каркас куба, но сейчас никак не могу найти этот...

Вывести в досе вращающийся 3d куб
Вывести в досе вращающийся 3d куб. Помогите сделать пожалуйста, для masm


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru