5

XZ平面の点a(0.0、0.0、10.0)を中心に回転させたい点、たとえばp(0.0、0.0、20.0)があります。それを行う最も簡単な方法は何ですか?QtとQVector3DおよびQMatrix4x4を使用して変換を実行しています。私が考えることができるすべてはそのようなものです:

QVector3D p(0.0, 0.0, 20.0);
QVector3D a(0.0, 0.0, 10.0);
QMatrix4x4 m;

m.translate(-a.x(), -a.y(), -a.z());
p = m*p;

m.setToIdentity();
m.rotate(180, 0.0, 1.0, 0.0);
p = m*p;

m.setToIdentity();
m.translate(a.x(), a.y(), a.z());
p = m*p;

しかし、それは私には非常に複雑に思えます。もっと単純な、またはよりエレガントな解決策があるのではないかと思います。

4

1 に答える 1

7

変換行列を使用した乗算の代わりに、単純なベクトルの減算/加算を使用してコードを簡素化できます。

QVector3D p(0.0, 0.0, 20.0);
QVector3D a(0.0, 0.0, 10.0);
QMatrix4x4 m;

p-=a;
m.rotate(180, 0.0, 1.0, 0.0);
// 3D vector has no overload for multiplying with a 4x4 matrix directly
p = m*p;
p+=a;
于 2010-08-13T17:02:17.943 に答える