2

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

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

在内部,我将点表示为(offset1, offset2, faceNumber)但一种(x,y,z)格式(如上所述)是现成的。

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

编辑:

一些事实:

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

1 回答 1

1

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

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

5
1 2 3 4 
6

你会有一个最终看起来像这样的二维平面

         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 度。

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

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

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

于 2013-05-06T15:49:24.273 回答