Вращение вокруг заданной точки - PullRequest
5 голосов
/ 13 августа 2010

У меня есть точка, скажем, p (0.0, 0.0, 20.0), которую я хочу повернуть вокруг точки a (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;

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

1 Ответ

6 голосов
/ 13 августа 2010

Вы можете упростить код, используя простое векторное вычитание / сложение вместо умножения с матрицей перевода:

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);
p*=m;
p+=a;
...