相对于另一个旋转矢量旋转矢量

时间:2015-05-04 14:58:48

标签: c++ math vector 3d rotation

我有一个向量v = <0,0,-1>和另外四个向量,它们在-1的z-index上形成一个“正方形”,边长为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空间中的任何点。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题,你想要在O点附近旋转你的形状ABCD,并且(OP)和(OV)对齐。

我想到了一种简单的算法,无需计算任何转换或旋转。让V&#39;,A&#39;,B&#39;,C&#39;,D&#39;成为你的新点。

1 / 放点V&#39;这样:

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

这应该不难,因为你知道O,P和V.

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

希望你被允许这样做。 如前所述,您最好问http://scicomp.stackexchange.com好的数学解决方案。

答案 1 :(得分:0)

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