Created
October 3, 2012 06:08
-
-
Save Lakret/3825333 to your computer and use it in GitHub Desktop.
Quaternions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Кватернионы — это гиперкомплексные числа, предложенные Гамильтоном в 1843 году. | |
// Кватернионы с операциями на них образуют алгебраическую структуру, называемую "телом" или "кольцом с делением" (division ring) ℍ. | |
// Такие алгебраические структуры отличаются от привычных нам полей (например, поля действительных чисел ℝ) тем, | |
// что умножение в них некоммутативно, т.е. для кватернионов справедливо a * b =/= b * a. | |
// Кватернионы очень удобны для записи вращений в трёхмерном пространстве, поэтому они нашли широкое применение в механике, | |
// 3D-графике и компьютерном зрении. | |
// В этом упражнении вы должны будете создать тип, представляющий кватернионы. | |
// Этот тип будет размеченным объединением, т.к. мы можем по-разному определить кватернионы. | |
// Например, определение 1: | |
// — кватернион можно определить как сумму a + b*i + c*j + d*k, где a, b, c и d — вещественные числа | |
// а i, j и k — мнимые единицы со св-вом i^2 = j^2 = k^2 = i*j*k = -1. | |
// Тогда мы можем записать первый конструктор переменной так: | |
type Quaternion = | |
| FourReals of float * float * float * float | |
// — кватернион — это упорядоченная пара комплексных чисел ((a + bi), (c + di)) | |
| PairOfComplex of Complex * Complex | |
// — кватернион — это вещественная матрица вида | |
// | a -b -c -d | | |
// | b a -d c | | |
// | c d a -b | | |
// | d -c b a | | |
// (используйте тип float [,] как параметр в конструкторе переменной. | |
// К сожалению, мы не можем задать размерности массива в типе. Столь мощные системы типизации существуют, но они крайне редки на сегодняшний день. | |
| RealMatrix of float [,] | |
// — кватернион — это комплексная матрица вида | |
// | ( a + bi) (c + di) | | |
// | (-c + di) (a - bi) | | |
| ComplexMatrix of Complex [,] | |
// — кватернион — это кортеж из действительного числа и трёхмерного вектора | |
| RealAnd3DVector of float * Vector3D |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment