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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
#1

Что нужно сделать, чтобы это скомпилировалось? - C++

22.09.2013, 20:53. Просмотров 446. Ответов 8
Метки нет (Все метки)

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
#include <iostream>
#include <cmath>
using namespace std;
class Matrix
{
    private:
        float m[4][4];
 
    public:
        Matrix()
        {
            Clear();
        }
        Matrix(const Matrix &a)
        {
            for(int i=0;i<4;i++)
                for(int j=0;j<4;j++)
                    m[i][j] = a[i][j];
        }
        ~Matrix()
        {
 
        }
        float *operator[](int i)
        {
            return m[i];
        }
        const float *operator[](int i) const
        {
            return m[i];
        }
        //Матрица масштабирования
        void Scale(float a, float b, float c)
        {
            Clear();
            m[0][0] = a;
            m[1][1] = b;
            m[2][2] = c;
            m[3][3] = 1;
        }
        //Матрица поворота
        void RotateZ(double alpha)
        {
            Clear();
            m[0][0] = cos(alpha);
            m[1][1] = cos(alpha);
            m[0][1] = sin(alpha);
            m[1][0] = -sin(alpha);
            m[2][2] = 1;
            m[3][3] = 1;
        }
        void RotateY(double alpha)
        {
            Clear();
            m[0][0] = cos(alpha);
            m[2][2] = cos(alpha);
            m[2][0] = sin(alpha);
            m[0][2] = -sin(alpha);
            m[1][1] = 1;
            m[3][3] = 1;
        }
        void RotateX(double alpha)
        {
            Clear();
            m[1][1] = cos(alpha);
            m[2][2] = cos(alpha);
            m[1][2] = sin(alpha);
            m[2][1] = -sin(alpha);
            m[0][0] = 1;
            m[3][3] = 1;
        }
        //Матрица перемещения
        void Move(float a, float b, float c)
        {
            Identity();
            m[0][3] = a;
            m[1][3] = b;
            m[2][3] = c;
        }
        //Матрица наклона
        void Tilt(float a)
        {
            Identity();
            m[0][1] = a;
        }
        //Единичная матрица
        void Identity()
        {
            Clear();
            m[0][0] = 1;
            m[1][1] = 1;
            m[2][2] = 1;
            m[3][3] = 1;
        }
        //Нулевая матрица
        void Clear()
        {
            for(int i=0;i<4;i++)
                for(int j=0;j<4;j++)
                    m[i][j] = 0;
        }
        Matrix& operator=(const Matrix& rhs )
        {
            for(int i=0;i<4;i++)
                for(int j=0;j<4;j++)
                    m[i][j] = rhs[i][j];
            return *this;
        }
        Matrix operator*(const Matrix& rhs )
        {
            Matrix to;
            for(int i=0;i<4;i++)
                for(int j=0;j<4;j++)
                    for(int k=0;k<4;k++)
                        to[i][j] += m[i][k]*rhs[k][j];
            return to;
        }
};
 
class Point
{
    private:
        float p[4];
 
    public:
        Point()
        {
            Clear();
        }
        Point(const Point &a)
        {
            for(int i=0;i<4;i++)
                p[i] = a[i];
        }
 
        ~Point()
        {
        }
        float operator[](int i) const
        {
            return p[i];
        }
        float &operator[](int i)
        {
            return p[i];
        }
        void Clear()
        {
            for(int i=0;i<4;i++)
                p[i] = 0;
        }
        void Lab1(float a, float b, float c, float d, float t)
        {
            p[0] = a*cos(t) - b*cos(c*t);
            p[1] = a*sin(t) - b*sin(c*t);
            p[2] = d - (p[0]*p[0] + p[1]*p[1]);
            p[3] = 1;
        }
        Point& operator=( Point& rhs )
        {
            for(int i=0;i<4;i++)
                p[i] = rhs[i];
            return *this;
        }
        void Debug()
        {
            cout<<"Debug:";
            for(int i=0;i<4;i++)
                cout<<" "<<p[i];
            cout<<endl;
        }
};
 
//То же самое что и ниже (сделал перегрузку глобальной)
/*Point operator*(const Matrix& left, const Point& p)
{
            Point to;
            for(int i=0;i<4;i++)
                for(int j=0;j<4;j++)
                    to[i] = left[i][j]*p[j];
            return Point(to);
}*/
 
Point MultiplyMP(Matrix M, Point P)
{
            Point to;
            for(int i=0;i<4;i++)
                for(int j=0;j<4;j++)
                    to[i] = M[i][j]*P[j];
            return to;
}
int main()
{
    Point p1,p2;
    Matrix S;
    S.Scale(1,2,3);
    for(float t = 0; t<100;t+=0.001)
    {
        p2 = MultiplyMP(S,p1);
    }
}
Ругательства на оператор = в классе Point.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 20:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что нужно сделать, чтобы это скомпилировалось? (C++):

Что нужно сделать чтобы программа сразу не закрывалась - C++
Что нужно сделать чтобы программа сразу не закрывалась, #include &lt;vcl.h&gt; #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;stdio.h&gt; ...

нужно чтобы функция располагалась до ее вызова, после ее вызова и в другом файле. Как это сделать? - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int n, *c; void fun(int a, int b) { for (int i = 0; i &lt;...

нужно создать таблицу из 3 строк и 4 столбцов и заполнить её (любой информацией,это неважно) . Как это можно сделать ? - C++
Здравствуйте.У меня возникла проблема. Помогите пожалуйста!Модуль в понедельник , про таблицы ничего не рассказывали , а преподаватель...

Конструкторы - что это и зачем нужно? - C++
Объясните, пожалуйста, для чего нужны конструкторы и деструкторы? Что это вообще?

Нужно удалить слова как это сделать? - C++
Есть такой текст &quot;for do while int void using while&quot; нужно удалить слова &quot;while&quot; как это сделать?

Нужно сделать что бы давало рандомно числа и нужно написать ответ - C++
В командной строке. Тоесть примерно так: Запускаешь программу, показывает числа что выбрались рандомно : 15*3=? После этого...

8
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
22.09.2013, 20:55 #2
Цитата Сообщение от eocron Посмотреть сообщение
Что нужно сделать, чтобы это скомпилировалось?
для этого класса можно обойтись без оператора =. присваивание по умолчанию будет
1
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 21:15 #3
C++
1
2
3
4
5
6
        Point& operator=( const Point& rhs )
        {
            for(int i=0;i<4;i++)
                p[i] = rhs[i];
            return *this;
        }
1
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
22.09.2013, 22:03 #4
Цитата Сообщение от eocron Посмотреть сообщение
Что нужно сделать, чтобы это скомпилировалось?
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
5
6
Point& operator=( const Point& rhs )
{
    for(int i=0;i<4;i++)
        p[i] = rhs[i];
    return *this;
}
мне кажется что это тоже не скомпилируется. rhs ведь не массив а объект класса Point
1
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 22:13 #5
Цитата Сообщение от _ Посмотреть сообщение
мне кажется что это тоже не скомпилируется. rhs ведь не массив а объект класса Point
Если бы не компилировалось, я бы и не выложил код. В классе Point, оператор [], перегружен.
2
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
22.09.2013, 22:32  [ТС] #6
Все, всем спасибо )
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
22.09.2013, 22:42 #7
eocron, можно спросить? что такое матрица поворота? она вроде в играх используется? просто я где то видел это. не могу вспомнить
0
coloc
погромист
411 / 247 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
22.09.2013, 23:05 #8
_, матрица поворота используется всюду в графике. Во многих графический либах она присутсвует, например в том же OpenGL или DirectX. Представь себе, что картинка это массив пикселей. И тебе нужно повернуть изображение на н-градусов. Вот тут то и матрица поворота пригодится. А вообще, вот http://ru.wikipedia.org/wiki/%CC%E0%...EE%F0%EE%F2%E0
1
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
22.09.2013, 23:30  [ТС] #9
Да, coloc, вообщем-то все сказал.У тебя есть 3D объект , обратившись к которому ты можешь получить любую из его координат, так вот ,допустим, ты этот объект проецируешь на плоскость виджета по координатам xy - получается плоская картинка.

Чтобы увидеть координаты z этого объекта, тебе, логично, нужно повернуть его: - Как это сделать? - домножить всю его координатную архитектуру на одну из трех или несколько матриц поворота и эта z-координата в какой-то мере перейдет в x и y, которые проецируются на твою плоскость.

С помощью всех этих матриц можно легко объект вертеть, крутить, растягивать, сжимать и прочий изврат. Другой вопрос в производительности такого дела. Там все намного сложнее и очень много проблем с одновременным использованием нескольких матриц (упрощать приходится - чистая математика).

В играх, кстати, очень популярны кватернионы, как замена данного кошмара, они как раз используются усиленно на всяких крайенжайнах, юнити и прочих.
0
22.09.2013, 23:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 23:30
Привет! Вот еще темы с ответами:

Что это за знак >> прочитал что это сдвиг вправо? что он делает - C++
int d=6, c=5,f; f = d &gt;&gt; c; cout&lt;&lt; f; вывод 0

точку нужно отобразить в виде пикселя. как это сделать - C++
/*Реализовать класс Graphic, который позволяет рисовать на экране консоли различные геометрические фигуры. Разнести проект по файлам. ...

Подскажите пожалуйста,что нужно сделать,что бы отображался русский язык?? - C++
Добрый вечер,формучани! После компиляции VS 12 у меня место русского языка показывает неизвестные иероглифы. Подскажите пожалуйста,что...

Нужно найти строки в фале, которые заканчиваются на восклицательный знак, как это сделать? - C++
Вот код, нужна строчка, которая будет искать строки с восклицательными знаками #include &lt;stdio.h&gt; #include &lt;conio.h&gt; int...


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

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

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