绕给定点旋转

发布于 2024-09-14 09:48:42 字数 441 浏览 6 评论 0原文

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

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

I have a point, let's say p(0.0, 0.0, 20.0) which I want to rotate about point a(0.0, 0.0, 10.0) in XZ plane. What is the simplest way to do it? I am using Qt with QVector3D and QMatrix4x4 to perform transformations. Everything I can think of is something like that:

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;

But it seems conspiciously complex to me and I wonder if there are any simpler or more elegant solutions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

╭⌒浅淡时光〆 2024-09-21 09:48:42

您可以通过使用简单的向量减法/加法而不是与平移矩阵相乘来简化代码:

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;

You can simplify the code by using simple vector subtraction/addition instead of the multiplication with a translation matrix:

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文