template<int n,class T> class VECTOR;
Общее
VECTOR<n,T> vec;
n - размер вектора - произвольное положительное целое число. T - тип его элементов.
Доступ к данным вектора:
Для 2-ух мерных векторов:
vec.x(); vec.y();
vec[0]; vec[1];
vec.M[0]; vec.M[1]; // не желательно, если только не под CUDA.
Операции
Функции члены
cross(const VECTOR& v) : VECTOR
Векторное произведение: v3 = v1.cross(v2). Вместо этого могут быть использованы v3 = cross3(v1,v2) или v3 = v1->*v2
dot(const VECTOR& v) : T
скалярное произведение. T x = v1.dot(v2) Вместо этого можно использовать x = dot(v1,v2) или x= v1*v2
len(), lenSquare() : T
длинна, квадрат длины
Normalize(): void
нормализация
Zero(): void
обнуление
Операции с векторами
вектор-константа или константа-вектор |
'*', '/', (правые и левые) '*=', '/=' |
векторо-вектор |
'+', '-', '==', '+=', '-=', |
скалярное произведение |
a*b, a.dot(b), dot3(a,b) |
векторное произведение |
a->*b, a.cross(b), cross3(a,b) |
покомпонентное умножение |
'*=' |
умножение матриц и векторов |
m*v, v*m |
|
|
|
|
|
|
|
|
Особенности
VECTOR<4,float>
По умолчанию автоматически поддерживает SSE операции. Может быть неявно преобразован в тип __m128
DISCARD_FOURTH_DIMENTION
Этот флаг позволяет работать с 4D векторами как с 3D. По умолчанию он включен. Если его отключить, все операции с VECTOR<4,float> будет считаться по 4 компонентам. Однако если он выключен, но не отключена SSE оптимизация, все операции кроме скалярного и векторного произведения все-равно будут выполняться над 4D векторами как над 4D а не 3D. Отключить SSE можно, закоментировав включение MGML_MATH_SIMD.h В случае отключенного SSE и включенного флага DISCARD_FOURTH_DIMENTION все операции над 4D векторами будут выполняться как над 3D векторами.
С остальными 4D векторами(не float) ситуация проще. Если DISCARD_FOURTH_DIMENTION включен, все операции использую только 3D иначе все операции используют 4D.
operator==
всегда сравнивает n элементов независимо от флага DISCARD_FOURTH_DIMENTION и SSE оптимизации |