24 #include "hom_transform.h"
25 #include "hom_coord.h"
28 #include <core/exceptions/software.h>
42 m_matrix =
new Matrix(4, 4);
51 m_matrix =
new Matrix(*(t.m_matrix));
89 float ct[3] = { (*m_matrix)(0, 3), (*m_matrix)(1, 3), (*m_matrix)(2, 3) };
93 (*m_matrix)(0, 3) = -ct[0] * (*m_matrix)(0, 0) - ct[1] * (*m_matrix)(0, 1) - ct[2] * (*m_matrix)(0, 2);
94 (*m_matrix)(1, 3) = -ct[0] * (*m_matrix)(1, 0) - ct[1] * (*m_matrix)(1, 1) - ct[2] * (*m_matrix)(1, 2);
95 (*m_matrix)(2, 3) = -ct[0] * (*m_matrix)(2, 0) - ct[1] * (*m_matrix)(2, 1) - ct[2] * (*m_matrix)(2, 2);
118 float cos = cosf(rad);
119 float sin = sinf(rad);
120 float s1[3] = { (*m_matrix)(0,1), (*m_matrix)(1,1), (*m_matrix)(2,1) };
121 float s2[3] = { (*m_matrix)(0,2), (*m_matrix)(1,2), (*m_matrix)(2,2) };
123 (*m_matrix)(0,1) = s1[0] * cos + s2[0] * sin;
124 (*m_matrix)(1,1) = s1[1] * cos + s2[1] * sin;
125 (*m_matrix)(2,1) = s1[2] * cos + s2[2] * sin;
126 (*m_matrix)(0,2) = -s1[0] * sin + s2[0] * cos;
127 (*m_matrix)(1,2) = -s1[1] * sin + s2[1] * cos;
128 (*m_matrix)(2,2) = -s1[2] * sin + s2[2] * cos;
137 float cos = cosf(rad);
138 float sin = sinf(rad);
139 float s1[3] = { (*m_matrix)(0,0), (*m_matrix)(1,0), (*m_matrix)(2,0) };
140 float s2[3] = { (*m_matrix)(0,2), (*m_matrix)(1,2), (*m_matrix)(2,2) };
142 (*m_matrix)(0,0) = s1[0] * cos - s2[0] * sin;
143 (*m_matrix)(1,0) = s1[1] * cos - s2[1] * sin;
144 (*m_matrix)(2,0) = s1[2] * cos - s2[2] * sin;
146 (*m_matrix)(0,2) = s1[0] * sin + s2[0] * cos;
147 (*m_matrix)(1,2) = s1[1] * sin + s2[1] * cos;
148 (*m_matrix)(2,2) = s1[2] * sin + s2[2] * cos;
157 float cos = cosf(rad);
158 float sin = sinf(rad);
159 float s1[3] = { (*m_matrix)(0,0), (*m_matrix)(1,0), (*m_matrix)(2,0) };
160 float s2[3] = { (*m_matrix)(0,1), (*m_matrix)(1,1), (*m_matrix)(2,1) };
162 (*m_matrix)(0,0) = s1[0] * cos + s2[0] * sin;
163 (*m_matrix)(1,0) = s1[1] * cos + s2[1] * sin;
164 (*m_matrix)(2,0) = s1[2] * cos + s2[2] * sin;
166 (*m_matrix)(0,1) = -s1[0] * sin + s2[0] * cos;
167 (*m_matrix)(1,1) = -s1[1] * sin + s2[1] * cos;
168 (*m_matrix)(2,1) = -s1[2] * sin + s2[2] * cos;
179 (*m_matrix)(0, 3) += (*m_matrix)(0, 0) * dx + (*m_matrix)(0, 1) * dy + (*m_matrix)(0, 2) * dz;
180 (*m_matrix)(1, 3) += (*m_matrix)(1, 0) * dx + (*m_matrix)(1, 1) * dy + (*m_matrix)(1, 2) * dz;
181 (*m_matrix)(2, 3) += (*m_matrix)(2, 0) * dx + (*m_matrix)(2, 1) * dy + (*m_matrix)(2, 2) * dz;
198 if (a || d)
trans(a, 0, d);
211 Matrix& matrix_ref = *m_matrix;
212 matrix_ref(0, 3) = x;
213 matrix_ref(1, 3) = y;
214 matrix_ref(2, 3) = z;
224 (*m_matrix) = *(t.m_matrix);
236 (*m_matrix) *= (*t.m_matrix);
248 return ((*m_matrix) == *(t.m_matrix));
259 m_matrix->
print_info(name ? name :
"HomTransform", col_sep, row_sep);
Matrix & id()
Sets the diagonal elements to 1.0 and all other to 0.0.
unsigned int num_cols() const
Return the number of columns in the Matrix.
unsigned int num_rows() const
Return the number of rows in the Matrix.
void print_info(const char *name=0, const char *col_sep=0, const char *row_sep=0) const
Print matrix to standard out.
void overlay(unsigned int row, unsigned int col, const Matrix &m)
Overlays another matrix over this matrix.
Matrix & transpose()
Transposes the matrix.
Matrix get_submatrix(unsigned int row, unsigned int col, unsigned int num_rows, unsigned int num_cols) const
Returns a submatrix of the matrix.
Expected parameter is missing.