

== Матрица

Смотрите link:http://www.jmonkeyengine.com/doc/com/jme/math/Matrix3f.html[Javadoc of Matrix3f]+

и link:http://www.jmonkeyengine.com/doc/com/jme/math/Matrix4f.html[Javadoc of Matrix4f]



=== Определение

Матрицы обычно используется в качестве _линейного преобразования_ сопоставить векторы в векторы. Что это: Y = MX где X это Вектор и M это Матрица применения каких-либо или всех преобразований (масштабировать, вращать, перемещение). 


Есть несколько специальных матриц:


_zero-матрица_ - матрицы все нулевые элементы.

[cols="3", options="header"]
|===

a|0
a|0
a|0

a|0
a|0
a|0

a|0
a|0
a|0

|===

_Identity Матрица_ это матрица с 1 на диагонали записей и 0 для всех других записей.

[cols="3", options="header"]
|===

a|1
a|0
a|0

a|0
a|1
a|0

a|0
a|0
a|1

|===

Матрица _обратимые_ если матрица существует _M^-1^_ где _MM^-1^ = M^-1^ = I_. 


_Транспонирование_ матрицы _M = [m~ij~]_ это _M^T^ = [m~ji~]_. Это приводит строки _М_ в столбцы_M^T^_.

[cols="7", options="header"]
|===

a|1
a|1
a|1
<a|    
a|1
a|2
a|3

a|2
a|2
a|2
a| ⇒ 
a|1
a|2
a|3

a|3
a|3
a|3
<a|    
a|1
a|2
a|3

|===

Матрица является симметричной, если _M_ = _M^T^_.

[cols="3", options="header"]
|===

a|X
a|A
a|B

a|A
a|X
a|C

a|B
a|C
a|X

|===

Где X, A, B, и C в равных количествах


jME включает в себя два типа матричных классов: Matrix3f и Matrix4f. Matrix3f это 3x3 матрица и является наиболее часто используемым (able to handle scaling and rotating), а Matrix4f это 4x4 матрицу, которая также может работать с переводом.



=== Преобразования

Умножения <<вектора#,Вектора>> с матрицей позволяет <<вектору#,Вектору>> трансформироваться. Либо вращение, масштабирование или смешение, этого <<вектора#,Вектора>>.



==== Масштабирование

Если _Диагональ матрицы_, определяется D = [d~ij~] и d~ij~ = 0 для i != j, имеет все положительные элементы это _матрица увеличения_. Если d~i~ больше 1, полученный <<вектор#,Вектор>> будет расти, а если d~i~ находится менее чем в 1 он будет сокращаться.



==== Вращение

_Матрица вращения_ требует, чтобы транспонировнная и обратной матрица были той же матрицой (R^-1^ = R^T^). _Вращения матрицы_ R может быть рассчитана как: R = I + (sin(угол)) S + (1 - cos(угол)S^2^ где S это:

[cols="3", options="header"]
|===

a|0
a|u~2~
a|-u~1~

a|-u~2~
a|0
a|u~0~

a|u~1~
a|-u~0~
a|0

|===


==== Перемещение

Перемещение требует 4x4 матрица, где <<вектор#,Вектор>> (x,y,z) сопоставленный (x,y,z,1) для умножения. _Перевод матрицы_ определяется как:

[cols="2", options="header"]
|===

a|M
a|T

a|S^T^
a|1

|===

Где M матрицы 3x3 (содержащий любое вращение / масштабирование информацию), T это перемещение <<вектора#,Вектора>> и S^T^ транспонирование вектора T. 1 это просто константа.



=== jME Class

Как Matrix3f и Matrix4f хранят свои значения, как числа с плавающей точкой, и находятся в открытом доступе, как (m00, m01, m02, …, mNN) где N равно 2 или 3.


Большинство методов являются я оставлю документации Javadoc.

