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

Класс точки и матрицы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Заданы целые числа a1, a2,…, an. Написать программу, которая находит сумму четных чисел среди чисел a1, a2,…, an http://www.cyberforum.ru/cpp-beginners/thread959862.html
Заданы целые числа a1, a2,…, an. Написать программу, которая находит сумму четных чисел среди чисел a1, a2,…, an.
C++ Сохранить значение возвращаемое функцией Есть 2-е функции. 1-я dectohex() перекодирует десятичный в шестнадцатеричный код и возвращает символьный массив. Все исправно работает. 2-я функция rgbtohex(), с помощью 1-й функции формирует HEX цвет из получаемого RGB. char* dectohex(int dec){ int mod; static int i = 0; static int index = 0; static char heks; i++; mod = dec%16; http://www.cyberforum.ru/cpp-beginners/thread959861.html
C++ Цикл while
Подскажите пжл как корректно сделать,так как он повторяет текст. #include <iostream> #include <windows.h> #include <stdio.h> using namespace std; int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251);
C++ Русский язык
Нужно написать программу, которая исправляла бы ошибки после Ж,Ч,Ш,Щ(Ы,Я,Ю на И,А,У). Учитывая исключения: Жюри, Брошюра, парашют. Помогите вот код, но почему он не работает? #include <conio.h> #include <string.h> #include <stdio.h> int main () { char q; printf ("vvedite stroku\n");
C++ Создать структуру данных о планете http://www.cyberforum.ru/cpp-beginners/thread959837.html
Создать структуру, в которой будут храниться данные о некоторой планете: код планеты (целое число), радиус планеты, масса планеты, скорость движения вокруг звезды. Описать функции ввода-вывода данных о планете и функции вычисления плотности планеты и перемещения планеты за указанный промежуток времени. В главные программе создать экземпляр структуры с данными о планете, заполнить его, подсчитать...
C++ Из геометрии в физику.Замена формул Движение планеты по кругу,расчитывается через сферическую систему координат: glBegin(GL_LINES); for(int i=0; i<=500; i++) { glColor3f(0.0,0.3,0.1); glVertex2f(0+sin((-mars_speed*3.14)/180)*240,0+cos((-mars_speed*3.14)/180)*220); glColor3f(0,0,0); glVertex2f(0+cos(i/3.14)*15+sin((-mars_speed*3.14)/180)*240,0+sin(i/3.14)*15+cos((-mars_speed*3.14)/180)*220); подробнее

Показать сообщение отдельно
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
22.09.2013, 20:28  [ТС]     Класс точки и матрицы
Допустим я так и сделал:
C++
1
2
3
4
5
6
7
8
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;
}
Получился вот такой код:

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)
Ошибка не исчезла.
Все так же, класс Point не может вызвать оператор =. Хотя если я напишу p1 = p2; все сработает.
И, да, эти три функции я не даром заковычкал. Они в первозданном виде помогли мне избежать данной ошибки.

Добавлено через 48 минут
Неужели, я первый кто столкнулся с этой ошибкой? =/ Столько людей уже просмотрело, а никто не отвечает.
 
Текущее время: 00:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru