我有一个点,假设我想绕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;

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

最佳答案

您可以通过使用简单的矢量减法/加法而不是使用转换矩阵的乘法来简化代码:

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;

关于qt - 绕给定点旋转,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3478860/

10-11 02:03