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

问题描述 投票:0回答:2

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

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

在内部,我将点表示为

(offset1, offset2, faceNumber)

,但 
(x,y,z)
 格式(如上所述)很容易获得。

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

编辑:

一些事实:

    最短路径在 x、y 和 z 上始终是单调的。
  1. 如果这些点在同一个面上,那么它只是欧几里得距离。
  2. 如果这些点不在同一个面上,则最短路径可能涉及 2 个或 3 个面。
language-agnostic geometry cubes
2个回答
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 的面。


0
投票
我创建了一个要点来生成立方体上的短路路径。

https://gist.github.com/timepp/2c54816852635021408c5a5c5ad0c8a6

具有以下功能:

console.log(shortestPathOnCubeSurface(2, [0, 2, 2], [0.1, 0.2, 2], [0.2, 0.1, 0])) result: [ [ 0, 0.18181818181818177, 2 ], [ 0, 0, 1.0000000000000004 ], [ 0.18181818181818188, 0, 0 ] ]
这是受到这个答案的启发:

https://math.stackexchange.com/questions/3023721/finding-the-shortest-path- Between-two-points-on-the-surface-of-a-cube/3041607#3041607

© www.soinside.com 2019 - 2024. All rights reserved.