通过新位置和失真计算矩形角的旋转?

时间:2017-08-03 20:46:53

标签: c# math 3d rotation 2d

我有一个基于增强现实的游戏项目,但我不想在这里使用任何这些库和插件,因为他们不能做我想做的事情......等等。< / p>

所以我的问题是可以计算 3D世界中2D矩形的旋转吗?如果是,如何?如果没有我该怎么办?

我正在考虑的插图图片:

每个轴上的0旋转(2维中的x,y,z轴??)

The 0 rotation on every axis (x,y,z axis in 2 dimension??)

3D世界中的0旋转

The 0 rotation in the 3D world

2D世界中的一些旋转(三维 - > x70,y10,z30)

旋转70,10,30 in 2D

The rotated rect in 2D

旋转70,10,30 in 3D

enter image description here

那么如何从2D计算3D旋转?像AR游戏一样。他们是如何做到的?

1 个答案:

答案 0 :(得分:1)

作为一个重要的先决条件,您必须知道未旋转的矩形上的哪些边缘与旋转的那些边缘相对应。

  1. 分别计算每个矩形(A和B)的法线,并计算从A旋转到B =&gt;所需的四元数即可。 (这可能在Eigen或其他游戏数学库中提供)

  2. 计算以下内容:

    • 未旋转的rect的上边缘的中点=&gt; <强> C
    • 旋转的矩形上的对应点=&gt;的 d
    • 旋转的rect的中心=&gt; <强>电子
  3. 通过 Q 旋转矢量 C 以获得矢量 F 。四元数旋转是大多数3D数学库中可用的另一种常见操作。

  4. 计算要从 F 旋转到 D - E =&gt;的四元数的 P

  5. 计算最终四元数 R = P * Q ,并根据需要转换为轴角:{{3 }}