Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы, часть 2.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
80.41 Mб
Скачать

Примеры некоторых классов Класс комплексных чисел

Далее будет рассмотрен пример реализации класса комплексных чисел с некоторыми операциями над ними.

В примере показано, как можно объявлять методы в классе (предъявляя прототипы методов), а описывать — за пределами класса (используя оператор ::).

Пример:

#include <iostream>

#include <cmath> // Этот заголовочный файл содержит функцию sqrt для вычисления корня

using namespace std;

class Complex {

private:

double real;

double img;

public:

Complex() { // Конструктор по умолчанию

real = 0;

img = 0;

}

Complex(const Complex& c) { // Копирующий конструктор

this->real = c.real;

this->img = c.img;

}

Complex(double, double); // Конструктор объявлен в классе, а определен будет вне его

void operator = (Complex c) { // Перегрузка оператора присваивания

this->real = c.real;

this->img = c.img;

}

bool operator == (Complex c) { // Перегрузка оператора сравнения

if (this->real == c.real && this->img == c.img) {

return true;

} else {

return false;

}

}

Complex operator + (Complex c) { // Перегрузка оператора сложения

Complex tmp;

tmp.real = this->real + c.real;

tmp.img = this->img + c.img;

return tmp;

}

Complex operator * (Complex c); // Перегрузка оператора умножения

// В классе только прототип, определение будет за пределами класса

double module(); // Модуль комплексного числа, в классе только прототип

void invert() { // Обращение комплексного числа в сопряженное

img = -img;

}

void printComplex() { // Вывод комплексного числа

cout &lt< real &lt< '+' &lt< img &lt< 'i' &lt< endl;

}

};

Complex::Complex(double a, double b) { // Конструктор определен будет вне класса

real = a;

img = b;

}

double Complex::module() { // Метод определен вне класса

return sqrt(real*real + img*img);

}

Complex Complex::operator * (Complex c) { // Оператор определен вне класса

Complex tmp;

tmp.real=(real*c.real)-(img*c.img);

tmp.img=(real*c.img)+(img*c.real);

return tmp;

}

int main() {

Complex a(2,3);

Complex b(3,2);

a.printComplex();

b.printComplex();

Complex c;

c = a+b; // Перегруженный оператор сложения в действии

c.printComplex();

Complex z; // Создастся нулевое число конструктором по умолчанию

z.printComplex();

return 0;

}

43.

Аффинные преобразования в пространстве 3D  Рассмотрим применение аффинных преобразований на плоскости 3D. Для начала введем понятие “однородных координат”. Заменим координатную тройку (x, у, z), задающую точку в пространстве, на четверку чисел (x, у, z, 1) или, более общо, на четверку 

Каждая точка пространства (кроме начальной точки О) может быть задана четверкой одновременно не равных нулю чисел; эта четверка чисел определена однозначно с точностью до общего множителя.

Предложенный переход к новому способу задания точек дает возможность воспользоваться матричной записью и в более сложных, трехмерных задачах.

Любое аффинное преобразование в трехмерном пространстве может быть представлено в виде суперпозиции вращений, растяжений, отражений и переносов. Поэтому вполне уместно сначала подробно описать матрицы именно этих преобразований (ясно, что в данном случае порядок матриц должен быть равен четырем).

А. Матрицы вращения в пространстве.

Матрица вращения вокруг оси абсцисс на угол φ:

Матрица вращения вокруг оси ординат на угол ψ:

Матрица вращения вокруг оси аппликат на угол χ:

Замечание. Полезно обратить внимание на место знака "-" в каждой из mpex приведенных матриц

Б. Матрица растяжения (сжатия):

где α > 0 - коэффициент растяжения (сжатия) вдоль оси абсцисс

β > 0 - коэффициент растяжения (сжатия) вдоль оси ординат

γ > 0 - коэффициент растяжения (сжатия) вдоль оси аппликат.

В. Матрицы отражения.

Матрица отражения относительно плоскости xу:

Матрица отражения относительно плоскости уz:

Матрица отражения относительно плоскости zx:

Г. Матрица переноса (здесь (λμ, v) - вектор переноса):

Замечание. Как и в двумерном случае, все выписанные матрицы невырождены.

44.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]