31 Real rad = deg / 180. * M_PI;
32 rad -= 2. * M_PI * std::floor((rad + M_PI) * (0.5 / M_PI));
39 Real deg = rad / M_PI * 180.;
40 deg -= 360. * std::floor((deg + 180.) * (1. / 360.));
67 Matrix3(
const RZ::Real coef[3][3])
69 memcpy(this->coef, coef, 3 * 3 *
sizeof (RZ::Real));
106 operator *(
Vec3 const &v)
const
108 return Vec3(row.vx * v, row.vy * v, row.vz * v);
113 operator *(
Matrix3 const &m)
const
116 Vec3(m.row.vx.x, m.row.vy.x, m.row.vz.x),
117 Vec3(m.row.vx.y, m.row.vy.y, m.row.vz.y),
118 Vec3(m.row.vx.z, m.row.vy.z, m.row.vz.z)
122 Vec3(row.vx * cols[0], row.vx * cols[1], row.vx * cols[2]),
123 Vec3(row.vy * cols[0], row.vy * cols[1], row.vy * cols[2]),
124 Vec3(row.vz * cols[0], row.vz * cols[1], row.vz * cols[2])
130 operator *(Real k)
const
132 return Matrix3(k * row.vx, k * row.vy, k * row.vz);
137 operator /(Real k)
const
139 return *
this * (1. / k);
146 return Matrix3(row.vx + m.row.vx, row.vy + m.row.vy, row.vz + m.row.vz);
153 return Matrix3(row.vx - m.row.vx, row.vy - m.row.vy, row.vz - m.row.vz);
161 row.vx.x * row.vy.y * row.vz.z + row.vx.y * row.vy.z * row.vz.x + row.vx.z * row.vy.x * row.vz.y
162 - (row.vx.x * row.vy.z * row.vz.y + row.vx.y * row.vy.x * row.vz.z + row.vx.z * row.vy.y * row.vz.x);
169 return coef[0][0] + coef[1][1] + coef[2][2];
177 Vec3(row.vx.x, row.vy.x, row.vz.x),
178 Vec3(row.vx.y, row.vy.y, row.vz.y),
179 Vec3(row.vx.z, row.vy.z, row.vz.z)
187 return Matrix3(Vec3::zero(), Vec3::zero(), Vec3::zero());
193 return Matrix3(Vec3::eX(), Vec3::eY(), Vec3::eZ());
197 crossMatrix(
Vec3 const &k)
207 rot(
Vec3 const &k, Real theta)
210 return eye() + K * sin(theta) + (1 - cos(theta)) * K * K;
221 azel(Real az, Real el)
223 return Matrix3::rot(Vec3::eY(), M_PI / 2 - el) * Matrix3::rot(Vec3::eZ(), -az);
229 return std::string(
"[\n")
230 +
" " + this->row.vx.toString() +
"\n"
231 +
" " + this->row.vy.toString() +
"\n"
232 +
" " + this->row.vz.toString() +
"\n"
237 operator==(
Matrix3 const &other)
const
240 (this->row.vx == other.row.vx)
241 && (this->row.vy == other.row.vy)
242 && (this->row.vz == other.row.vz);