53 mat.translate(translate);
54 mat.rotate(EulerToQuaternion(rotate));
65 mat.translate(translate);
66 mat.rotate(EulerToQuaternion(rotate));
68 mat.rotate(EulerToQuaternion(turn));
77 mat.rotate(EulerToQuaternion(rotateExtrinsic));
78 mat.translate(translate);
79 mat.rotate(EulerToQuaternion(rotate));
81 mat.rotate(EulerToQuaternion(turn));
84 QQuaternion q = EulerToQuaternion(rotateExtrinsic) * EulerToQuaternion(rotate);
85 rotate = QuaternionToEuler(q);
88 translate = EulerToQuaternion(rotateExtrinsic).rotatedVector(translate);
111 float cpsi2 = std::cos(euler.
x / 2.0f);
112 float spsi2 = std::sin(euler.
x / 2.0f);
113 float cth2 = std::cos(euler.
y / 2.0f);
114 float sth2 = std::sin(euler.
y / 2.0f);
115 float cphi2 = std::cos(euler.
z / 2.0f);
116 float sphi2 = std::sin(euler.
z / 2.0f);
117 auto a = cphi2 * cth2 * cpsi2 - sphi2 * cth2 * spsi2;
118 auto b = cphi2 * cpsi2 * sth2 + sphi2 * sth2 * spsi2;
119 auto c = cphi2 * sth2 * spsi2 - sphi2 * cpsi2 * sth2;
120 auto d = cphi2 * cth2 * spsi2 + cth2 * cpsi2 * sphi2;
121 return QQuaternion{a, b, c, d};
126 auto qvec = q.toVector4D();
133 float term1 = std::atan(d / a);
137 term2 =
static_cast<float>(
M_PI_2);
139 term2 = std::atan(c / b);
141 float x = term1 + term2;
142 float y = 2 * std::atan(std::sqrt((b * b + c * c) / (a * a + d * d)));
143 float z = term1 - term2;
void draw(QColor const &, QMatrix4x4 const &, Geometry const &)
GeometryHandle getGeometry(GeometricID::Key)
void addExtrinsicRotation(Vector3D turn, Vector3D scale, Vector3D &rotate, Vector3D rotateExtrinsic, Vector3D &translate)
void transform(float scale, Vector3D rotate, Vector3D translate)
GeometryStore & geometryStore()