围绕给定点旋转

maj*_*aen 5 3d geometry qt computational-geometry

我有一个观点,比如p(0.0,0.0,20.0),我想在XZ平面上绕点a(0.0,0.0,10.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;
Run Code Online (Sandbox Code Playgroud)

但这对我来说似乎很复杂,我想知道是否有更简单或更优雅的解决方案?

Gre*_*g S 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);
p*=m;
p+=a;
Run Code Online (Sandbox Code Playgroud)