将三维角度划分为相等的数量

时间:2011-09-26 20:08:58

标签: 3d 2d angle quaternions love2d

假设您有一个2d物体,您可以通过简单地以15度为增量围绕中心旋转将其分成15度旋转。

如果我想计算3d对象的所有角度,每个角度之间的间距相等,我将如何进行此操作。

虽然为每个人做p * r * y会起作用但是它相当随意并且有很多重叠。我也非常喜欢四元数解决方案。

我正在为一个我目前正在进行的视频游戏项目做这件事,基本上是一个旧学校的飞行模拟游戏,尽管游戏中的3d渲染为2d精灵。我正在寻找一种简单的方法,以相同的间隔角度(包括每个正交的角度)在程序上渲染我的飞机模型的所有可能角度。

1 个答案:

答案 0 :(得分:2)

有多种方法可以做到这一点;解决方案不是根据给定的信息唯一定义的。还要注意,短语“所有可能的角度”都具有误导性,因为它有无限的角度。

然而,如果通过“3d角度”,你的字面意思是solid-angle(以球面度数为单位),那么platonic solids将球体分成相等的立体角。 (从技术上讲,你想要spherical polyhedra,但它们“几乎”是相同的,因为我们可以采取多面体解决方案并“放松”它。)

请记住你想要“ [包括]每个正交[角度] ”的条件(应该有一些彼此正交的三重视图),我们很难过注意到只有一种满足这个要求的柏拉图固体,即八面体:

enter image description here

可悲的是,这只对应于正交视图(并且只有那些视图)。这将是无聊的,可能不是你想要的。然而,你可以做的是建立在这个解决方案的基础上,并细分八面体。这有两种可能性:

  1. 对于八面体中的每个面,您可以在该面的中心创建一个新视图(星形)。结果将是this 4-view origami中所示的每个顶点的视图(奇怪的是我能找到的最佳图片)。因此,除了正交角度之外,您还可以在每个轴之间获得8个角度,形式为(±1,±1,±1)。将视图数量保持在可管理的大小。

  2. 如果你想要更多的视图,除了从八面体而不是二十面体开始之外,你可以做一些像构建测地圆顶的事情。在第一个例子中,我们将三角形面细分为细分幂的“三角形”,以获得“双频八面体测地球”。

  3. enter image description hereenter image description here *

    * original link

    算法:取每个相邻顶点的数学平均值来产生新的顶点。

    这可能无法完美地划分角度,但它会相当接近。如果您想要更加“相等”的立体角,请参阅链接以获取“3频八面体测地球”的示例。

    算法:对于第一个近似,您可以通过取矢量(A+2B)/3来改变角度,反之亦然。如果你进一步寻求极高的精度,而不是明确地计算方程,你可以使用四面体的立体角公式作为精度的度量,并在初始猜测上执行relaxation,在那里你慢慢扰乱三分法朝向或远离原点。

    此外,Google搜索结果在数学上有点密集,但您可以从equal area spherical polyhedra中收集一些用途。