【问题标题】:Rotate vector relative to another rotated vector相对于另一个旋转矢量旋转矢量
【发布时间】:2015-05-04 14:58:48
【问题描述】:

我有一个向量 v = <0,0,-1> 和其他四个向量,它们在 z-index 为 -1 处形成一个“正方形”,边长为 2*s,因此这四个向量是:

  • OA = <-s, s, -1>
  • OB = < s, s, -1>
  • OC = <-s,-s, -1>
  • OD = < s,-s, -1>

现在,考虑 3D 空间中任意位置的点 P

我想旋转v,使其与点OP 的位置向量P 对齐,然后对其他四个向量应用旋转,使所有四个向量以相同的相对位置粘在一起来自v的位置。

换句话说,向量的整个“金字塔”需要旋转,以便vOP 对齐。

Screenshot of scenario.

P 点是任意的,可以是 3D 空间中的任何点。非常感谢任何帮助!

【问题讨论】:

  • 我认为这个问题应该在scicomp.stackexchange.com 提出。您应该准确地说,如果我理解正确,您想围绕点 O 旋转形状 ABCD。
  • 原谅我。我在这里看到了与数学相关的问题。我把问题复制过来。谢谢
  • @Mekku 如果你这样做了,请从这里删除它。
  • Eigen 有一个 Quaternion 类模板可以执行此操作,以防您不想重新发明轮子。
  • @Wintermute 我已经尝试过使用四元数,但我似乎无法理解它们。如果我有四元数旋转将中间向量v 旋转成OP,那么可以将相同的旋转应用于其他四个向量吗?

标签: c++ math vector 3d rotation


【解决方案1】:

我不知道这是不是太晚了,因为您正在移动问题,但是您的问题在 3D 图形工作中被大量使用。您应该查看关于旋转矩阵的维基百科文章和一篇好文章 Rotation About an Arbitrary Axis in 3D。这两个都应该让您了解如何在 3D 中操作向量或矩阵。

【讨论】:

  • 据我了解,绕轴旋转并不能解决他的问题。
  • 我认为你是正确的@coincoin。 OP 想知道如何在 3D 系统中旋转,而不是围绕单轴旋转。我链接的文章解释了如何做到这一点。
【解决方案2】:

如果我正确理解了这个问题,您希望在 (OP) 和 (OV) 对齐的约束下围绕点 O 旋转形状 ABCD。

我想到了一种方法,可以简单地通过算法完成该操作,而无需计算任何转换或旋转。让 V',A',B',C',D' 成为你的新点。

1/ 放置一个点 V' 使得:

-->   ||VO||   -->
V'O = ------ . OP
      ||OP||

这应该不难,因为您知道 O、P 和 V。

2/ 矢量 V'O 或 OP 垂直于平面 A',B',C',D'。所以你可以把后面的点放在这个平面上,这样它们就形成了一个正方形,并把 V' 作为中间。这里需要一些数学(如果有兴趣我可以加深解释)。

希望你被允许这样做。 正如之前评论的那样,您最好向 http://scicomp.stackexchange.com 询问很好的数学解决方案。

【讨论】:

  • 我不确定我是否理解这一点,但感谢您抽出时间回答。我已将问题移至scicomp.stackexchange.com。我应该按照建议从这里删除问题吗?
  • 我现在不确定如果你没有理解这一点,那肯定会更难理解。你有什么不明白的? (我会尝试更新我的答案)
  • 我认为这是没有正确解释自己的问题,因为 VO /\ V'O = 0 的假设真的让我感到困惑。
  • 我试图编辑因为我希望更容易理解。希望能有所帮助,但如果您希望它适用于任何 P,您的问题涉及一些数学背景。
  • 啊!现在我明白你在做什么了。您正在创建矢量V'O 作为OP 的一部分并将其用作平面的法线。感谢您的编辑。我的大脑已经厌倦了所有的数学。我会试一试
猜你喜欢
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
相关资源
最近更新 更多