Матрицы 2x2

Создайте класс Matrix22, который хранит матрицы вещественных чисел 2 на 2. Например, \(\begin{pmatrix}a&b\\c&d\end{pmatrix}\). Вы можете выбрать любой способ хранения данной матрицы в полях класса.

Не забудьте создать отдельный класс для тестирования всех реализованных возможностей Matrix22.

  1. Создайте конструктор, в который передаются 4 числа: new Matrix22(1, 2, 3, 4).
  2. Создайте конструктор, в который передаётся двумерный массив: new Matrix22(new int[][]\{\{1, 2}, {3,4}}).
  3. Создайте метод, вычисляющий след матрицы и дискриминант: $a+d$ и $ad-bc$.
  4. Создайте метод (get-метод), возвращающий двумерный массив значений матрицы, аналогичный массиву, который передается в конструктор в задаче 2. Убедитесь, что изменения значений внутри возвращенного массива не влияют на значения внутри матрицы.
  5. Создайте метод String toString(), который возвращает матрицу в виде строки.
  6. Создайте метод void print(), который распечатывает матрицу, по возможности красиво — построчно и выровнено.
  7. Создайте метод add(Matrix22 b), который добавляет матрицу b и возвращает новую матрицу.
  8. Создайте метод mul(Matrix22 b), который умножает на матрицу b и возвращает новую матрицу.
  9. Создайте метод pow(int n), который возводит матрицу в степень $n$, т.е. умножает сам на себя $n$ раз.
  10. Создайте функцию, которая возвращает $n$-ое число Фибоначчи, вычисляя \(\begin{pmatrix}1&1\\1&0\end{pmatrix}^n\). Реализуйте эту функцию вне класса Matrix22.
  11. (SVG отменил, лучше в следующем семестре сделаем что-нибудь интересное)

Наследование

Создайте класс Rotation, который наследует Matrix22.

  1. Конструктор этого класса получает на вход число $\alpha$ и создаёт матрицу \(\begin{pmatrix}\sin\alpha&\cos\alpha\\-\cos\alpha&\sin\alpha\end{pmatrix}\).
  2. Создайте get-метод getAngle(), который возвращает угол, использованный в конструкторе.