立方体表面上的点之间的距离

时间:2013-05-06 15:42:20

标签: language-agnostic geometry cubes

(x1, y1, z1)(x2, y2, z2)成为以原点为中心的轴对齐边长2 立方体表面上的欧几里得3空间中的两个点。 / p>

如何有效地计算立方体表面之间的距离(或平方距离)?

在内部,我将点数表示为(offset1, offset2, faceNumber),但(x,y,z)格式(如上所述)很容易获得。

我更喜欢C或Python代码,但我很乐意接受伪代码或任何东西,真的。

编辑:

一些事实:

  1. 最短路径在x,y和z中始终是单调的。
  2. 如果这些点在同一张脸上,那么它只是欧几里德距离。
  3. 如果这些点不在同一张脸上,则最短路径可能涉及2个或3个脸部。

1 个答案:

答案 0 :(得分:1)

编辑:我会做的是将3d立方体变成2d平面。需要注意的是,如果该点位于立方体的另一侧,则需要将最终表面放置在十字架的所有两端。

如果一个立方体有这样的边,你可以折叠,使4接触到边1。

5
1 2 3 4 
6

你会有一架最终看起来像这样的2d飞机

         3
    4/5  5   5/2
3   4    1   2   3
    4/6  6   2/6
         3

所以,我修改了这个。现在,每个角板都代表两个面板之间可以发生的连接。当您最初布置此阵列时,面板2,4,5和6上的每个点将映射到三个点。解决方案是指向任何给定点的最短线,代表点2,如果您需要将其映射到多个点。

将3D立方体中的点映射到2d图上最初的1到6个痛点非常简单。剩下的唯一困难是弄清楚如何将点从2平面映射到“2/6”平面等等。这只是思考每种情况的问题。例如:2 - > 2/6与5 - >不同。 5/2。我的直觉是,在将立方体的宽度向适当的方向移动之前,它要么是90度或90度旋转。

例如,为了正确处理您所布置的情况,我们将在第一个平面的左下角和平面2的右下角有一个值。在以下内容之后:'

points in plane 2/6 = rot90(points in plane 2) - width of the cube.  

我们将在2/6平面的左下角有一个点。然后,这将适当地成为最短路径,并且适当地该路径穿过平面6的面。