让(x1, y1, z1)
和(x2, y2, z2)
成为以原点为中心的轴对齐边长2 立方体表面上的欧几里得3空间中的两个点。 / p>
如何有效地计算立方体表面点之间的距离(或平方距离)?
在内部,我将点数表示为(offset1, offset2, faceNumber)
,但(x,y,z)
格式(如上所述)很容易获得。
我更喜欢C或Python代码,但我很乐意接受伪代码或任何东西,真的。
编辑:
一些事实:
答案 0 :(得分:1)
如果一个立方体有这样的边,你可以折叠,使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的面。