22 #ifndef __D_TEMPLATE_VECTOR_H__
23 #define __D_TEMPLATE_VECTOR_H__
25 #include "dCoreStdafx.h"
27 #include "dClassAlloc.h"
40 :m_x(ptr[0]), m_y(ptr[1]), m_z(ptr[2]), m_w (ptr[3])
46 :m_x(copy.m_x), m_y(copy.m_y), m_z(copy.m_z), m_w (copy.m_w)
52 :m_x(x), m_y(y), m_z(z), m_w (w)
56 T& operator[] (dInt32 i)
63 const T& operator[] (dInt32 i)
const
87 return (*
this =
dTemplateVector<T> (m_x + A.m_x, m_y + A.m_y, m_z + A.m_z, m_w + A.m_w));
97 return (*
this =
dTemplateVector<T> (m_x - A.m_x, m_y - A.m_y, m_z - A.m_z, m_w - A.m_w));
107 return (*
this =
dTemplateVector<T>(m_x * B.m_x, m_y * B.m_y, m_z * B.m_z, m_w * B.m_w));
112 T val(m_x + m_y + m_z + m_w);
118 return *
this + A * B;
123 return *
this - A * B;
130 m_z * B.m_x - m_x * B.m_z,
131 m_x * B.m_y - m_y * B.m_x, m_w);
140 for (dInt32 i = 0; i < 4; i++) {
144 array[3][i] = T(1.0f);
149 for (dInt32 i = 0; i < 4; i++)
151 for (dInt32 j = 0; j < 3; j++)
154 for (dInt32 k = 0; k < 4; k++)
158 cofactor[j][k0] = array[j][k];
163 T x = cofactor[0][0] * (cofactor[1][1] * cofactor[2][2] - cofactor[1][2] * cofactor[2][1]);
164 T y = cofactor[0][1] * (cofactor[1][2] * cofactor[2][0] - cofactor[1][0] * cofactor[2][2]);
165 T z = cofactor[0][2] * (cofactor[1][0] * cofactor[2][1] - cofactor[1][1] * cofactor[2][0]);
168 normal[i] = sign * det;
178 T val (m_x * A.m_x + m_y * A.m_y + m_z * A.m_z + m_w * A.m_w);
185 return dMax(dMax(m_x, m_y), dMax(m_z, m_w));
190 return dTemplateVector<T>((m_x > data.m_x) ? m_x : data.m_x, (m_y > data.m_y) ? m_y : data.m_y, (m_z > data.m_z) ? m_z : data.m_z, (m_w > data.m_w) ? m_w : data.m_w);
195 return dTemplateVector<T>((m_x < data.m_x) ? m_x : data.m_x, (m_y < data.m_y) ? m_y : data.m_y, (m_z < data.m_z) ? m_z : data.m_z, (m_w < data.m_w) ? m_w : data.m_w);
200 void Trace (
char*
const name)
const
202 dTrace ((
"%s %f %f %f %f\n", name, m_x, m_y, m_z, m_w));