git-svn-id: svn://db.shs.com.ru/libs@642 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -379,18 +379,12 @@ QQuaternion Transform::fromAxes(const QVector3D & xAxis, const QVector3D & yAxis
|
||||
|
||||
QVector3D Transform::fromDirection(QVector3D d, float pitch) {
|
||||
QVector3D ret;
|
||||
//QMatrix3x3 m = QQuaternion::fromDirection(d, QVector3D()).toRotationMatrix();
|
||||
//ret[0] = -atan2(m(0, 2), m(1, 2));
|
||||
//ret[1] = acos (m(2, 2));
|
||||
//ret[2] = atan2(m(2, 0), m(2, 1));
|
||||
d.normalize();
|
||||
ret[0] = M_PI - acos(d.z());
|
||||
ret[1] = pitch * deg2rad;
|
||||
ret[2] = -atan2(d.x(), d.y());
|
||||
//if (ret[0] < 0.) ret[0] += M_2PI;
|
||||
//if (ret[0] >= M_2PI) ret[0] -= M_2PI;
|
||||
if (ret[2] < 0.) ret[2] += M_2PI;
|
||||
if (ret[2] >= M_2PI) ret[2] -= M_2PI;
|
||||
normalizeAngleRad(ret[0]);
|
||||
normalizeAngleRad(ret[2]);
|
||||
return ret * rad2deg;
|
||||
}
|
||||
|
||||
|
||||
@@ -278,6 +278,8 @@ inline float cosABV(const QVector3D & v0, const QVector3D & v1) {
|
||||
if (l == 0.f) return 0.;
|
||||
return (QVector3D::dotProduct(v0, v1)) / l;
|
||||
}
|
||||
inline void normalizeAngleRad(float & a) {while (a < 0.) a += M_2PI; while (a >= M_2PI) a -= M_2PI;}
|
||||
inline void normalizeAngleDeg(float & a) {while (a < 0.) a += 360. ; while (a >= 360. ) a -= 360. ;}
|
||||
inline QVector3D projection(const QVector3D & v, const QVector3D & to) {return to.normalized() * v.length() * cosABV(v, to);}
|
||||
QVector3D orthToVector(const QVector3D & v, const float & scale = 1.);
|
||||
QVector3D rotateVector(const QVector3D & v, const QVector3D & a);
|
||||
|
||||
Reference in New Issue
Block a user