Вращение вокруг данной точки

У меня есть точка, скажем, p (0.0, 0.0, 20.0), который я хочу повернуть о точке (0.0, 0.0, 10.0) в плоскости XZ. Что самый простой путь состоит в том, чтобы сделать это? Я использую 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;

Но это кажется conspiciously сложным мне и интересно, существуют ли какие-либо более простые или более изящные решения?

5
задан majaen 13 August 2010 в 16:27
поделиться