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

Вращение пирамиды - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Функция для увеличения размера букв http://www.cyberforum.ru/cpp-beginners/thread139892.html
Есть ли функция для увеличения размера букв ?
C++ Программа содержит два класса. Помогите решить, пожалуйста. Спасибо. Программа содержит два класса. Оба класса содержат по одному целому полю и по одному указателю на символьный тип. Написать функцию, которая сравнивает строки обоих классов. Причем функция сравнения должна быть дружественной только одному из классов. Добавлено через 31 минуту Пожалуйста с объяснениями. http://www.cyberforum.ru/cpp-beginners/thread139866.html
Создать абстрактный класс A, который включает в себя: C++
Помогите решить, пожалуйста. Спасибо. Создать абстрактный класс A, который включает в себя: два вещественных числа; конструктор с параметрами; чисто виртуальные функции squaer() и perimeter(). Производный от него класс Rectangle. Программа считает площадь и периметр прямоугольника, используя позднее связывание. Добавлено через 32 минуты Пожалуйста с объяснениями.
C++ Написать класс обработчик исключительных ситуаций.
Помогите решить, пожалуйста. Спасибо. Написать класс обработчик исключительных ситуаций. Программа ловит ошибку деление на нуль и выводит сообщение, в какой части программы произошла ошибка. Добавлено через 33 минуты Пожалуйста с объяснениями.
C++ Создать класс Massiv (матрица вещественных чисел), http://www.cyberforum.ru/cpp-beginners/thread139863.html
Помогите решить, пожалуйста. Спасибо. Создать класс Massiv (матрица вещественных чисел), количество строк и столбцов константные поля. Ввод размера матрицы осуществляется в главной функции. Найти максимальное количество его одинаковых элементов. Добавлено через 33 минуты Пожалуйста с объяснениями.
C++ Все слова в тексте отсортировать в алфавитном порядке ребята помогите пожалуйста!!!! 1.Все слова в тексте отсортировать в алфавитном порядке 2.Написать программу, проверяющую, является ли частью данного слова слово 'сок'. Ответ должен быть 'да' или 'нет'. 3.В заданный непустой текст входят только цифры и буквы. Определить, удовлетворяет ли он следующему свойству: сумма числовых значений цифр, входящих в текст, равна длине текста ... подробнее

Показать сообщение отдельно
Nfyaka
1 / 1 / 1
Регистрация: 04.05.2010
Сообщений: 28

Вращение пирамиды - C++

02.06.2010, 20:14. Просмотров 980. Ответов 0
Метки (Все метки)

Задача: реализовать вращение правильной пирамиды вокруг оси, которая проходит через одно из ее боковых ребер. Количество боковых граней равно трем. Среда программирования - турбо си++.

Добавлено через 28 минут
я написала код, но при запуске она выбивает. Пожалуйста, посмотрите этот километровый код, может найдете ошибки... или, может, киньте свой
черд, лучше киньте свой!..

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
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream.h>
#include <graphics.h>
#include <string.h>
//-------функция инициализации графики---------------
 
int InitGraph()
{
   int GraphMode,DriverMode=DETECT,ErrorCode;
   initgraph(&DriverMode,&GraphMode,"../BGI");
   ErrorCode=graphresult();
   if (ErrorCode!=grOk)
     {
      printf("Error %d -> %s",ErrorCode,grapherrormsg(ErrorCode));
      getch();
      exit(1);
     }
   return 0;
}
//----------Класс для работы с двумерным массивом-------------
class Matrix
{
public:
double**mas;       //на двумерный массив
int lines;              //к-ство строк
int columns;         //колонок
Matrix();              //делает mas=NULL;
Matrix(int l,int c);  //вызывает Init(int l,int c)
~Matrix();            //очищает память
void Init(int l,int c);// выделяет память на дв. массив
void Zero();           //заполняет массив нулями
Matrix operator *(Matrix ob); //чтобы можно было умножать матрицу на матрицу через объекты
void operator =(Matrix ob);   //чтобы записать результат
};
//-----------------------
Matrix::Matrix()
{   mas=NULL;
}
Matrix::Matrix(int l,int c)
{
    Init(l,c);
}
Matrix::~Matrix()
{  if(mas!=NULL)
    free(mas);
   mas=NULL;
}
void Matrix::Init(int l,int c)
{   lines=l;
    columns=c;
    mas=new double*[l];
    for(int i=0;i<l;i++)
    mas[i]=new double[c];
}
void Matrix::Zero()
{
    for(int i=0;i<lines;i++)
    for(int j=0;j<columns;j++)
    mas[i][j]=0;
}
Matrix Matrix::operator *(Matrix ob)
{
    Matrix res(lines,ob.columns);
    res.Zero();
    for(int i=0;i<lines;i++)
        for(int j=0;j<ob.columns;j++)
            for(int k=0;k<columns;k++)
                res.mas[i][j]+=mas[i][k]*ob.mas[k][j];
    return res;
}
void Matrix::operator =(Matrix ob)
{
    columns=ob.columns;
    lines=ob.lines;
    delete[]mas;
    mas=ob.mas;
}
//--------Работа с пирамидой---------------
class Pyramid
{   public:
    Matrix koord;      //Матрица с координатами вершин пирамиды
    Pyramid();         //задает начальные координаты пирамиды
    void Draw();      //Рисует пирамиду за координатами сохраненными в koord
    void Move(double fi);//Изменяет координаты с помощью афинных преобразований
};
//-----------------------
Pyramid::Pyramid()
{
koord.Init(4,4);
koord.mas[0][0]=400;
koord.mas[0][1]=159;
koord.mas[0][2]=49;
koord.mas[1][0]=300;
koord.mas[1][1]=300;
koord.mas[1][2]=0;
koord.mas[2][0]=400;
koord.mas[2][1]=300;
koord.mas[2][2]=99;
koord.mas[3][0]=500;
koord.mas[3][1]=300;
koord.mas[3][2]=0;
for(int i=0;i<4;i++)
koord.mas[i][3]=1;
setcolor(15);
Draw();
}
void Pyramid::Draw()
{
line(koord.mas[0][0],koord.mas[0][1],koord.mas[1][0],koord.mas[1][1]);
line(koord.mas[0][0],koord.mas[0][1],koord.mas[2][0],koord.mas[2][1]);
line(koord.mas[0][0],koord.mas[0][1],koord.mas[3][0],koord.mas[3][1]);
line(koord.mas[1][0],koord.mas[1][1],koord.mas[2][0],koord.mas[2][1]);
line(koord.mas[2][0],koord.mas[2][1],koord.mas[3][0],koord.mas[3][1]);
line(koord.mas[3][0],koord.mas[3][1],koord.mas[1][0],koord.mas[1][1]);
}
void Pyramid::Move(double fi)
{       int i,j;
    int l=1,m=1,n=1;
    double d=sqrt(pow(m,2)+pow(n,2));
    int a[3]={300,300,0};
    Matrix temp(4,4);
    Matrix res(4,4);
    temp.Zero();
    res.Zero();
//перемещение в начало координат
    for(i=0;i<4;i++)
    res.mas[i][i]=1;
    for(i=0;i<3;i++)
    res.mas[3][i]=-a[i];
//поворот относительно х проекции ребра
    temp.mas[0][0]=1;
    temp.mas[3][3]=1;
    temp.mas[1][1]=n/d;
    temp.mas[2][1]=-m/d;
    temp.mas[1][2]=n/d;
    temp.mas[2][2]=m/d;
    res=res*temp;
    temp.Zero();
//поворот относительно у
    temp.mas[0][0]=d/sqrt(d*d+l*l);
    temp.mas[1][1]=1;
    temp.mas[0][2]=l/sqrt(d*d+l*l);
    temp.mas[2][0]=-l/sqrt(d*d+l*l);
    temp.mas[2][2]=d/sqrt(d*d+l*l);
    temp.mas[3][3]=1;
    res=res*temp;
    temp.Zero();
//поворот точки на нужный угол
    temp.mas[0][0]=cos(fi);
    temp.mas[0][1]=sin(fi);
    temp.mas[1][0]=-sin(fi);
    temp.mas[1][1]=cos(fi);
    temp.mas[2][2]=1;
    temp.mas[3][3]=1;
    res=res*temp;
    temp.Zero();
//обратный поворот относительно у
    temp.mas[0][0]=d/sqrt(d*d+l*l);
    temp.mas[1][1]=1;
    temp.mas[0][2]=-l/sqrt(d*d+l*l);
    temp.mas[2][0]=l/sqrt(d*d+l*l);
    temp.mas[2][2]=d/sqrt(d*d+l*l);
    temp.mas[3][3]=1;
    res=res*temp;
    temp.Zero();
//поворот относительно х
    temp.mas[0][0]=1;
    temp.mas[3][3]=1;
    temp.mas[1][1]=n/d;//cos(fi);
    temp.mas[2][1]=m/d;//-sin(fi);
    temp.mas[1][2]=-n/d;//sin(fi);
    temp.mas[2][2]=m/d;//cos(fi);
    res=res*temp;
    temp.Zero();
//перемещение
    for(i=0;i<4;i++)
    temp.mas[i][i]=1;
    for(i=0;i<3;i++)
    temp.mas[3][i]=a[i];
    res=koord*res*temp;
    koord=koord*res;
}
//-----------------------
int main()
{   InitGraph();
    int sw;
    double f=0,step=0.1;
    Pyramid ob;
    do
    {   sw=getch();
        if(sw==27) break;
        cleardevice();
        f+=step;
        cout<<f;
        ob.Move(f);
        ob.Draw();
    }
    while(sw!=27);
return 0;
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru