【问题标题】:Distance between points on surface of cube立方体表面上的点之间的距离
【发布时间】:2013-05-06 15:42:20
【问题描述】:

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

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

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

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

编辑:

一些事实:

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

【问题讨论】:

  • “球体表面”是什么意思?什么球体?
  • @Kris,抱歉,指的是立方体。
  • 所以你想要两点之间的最短路径,使得路径完全位于立方体的表面上?
  • 是的,没错。
  • 好吧,我想要那条路径的长度(或平方长度),我实际上并不需要该路径。

标签: language-agnostic geometry cubes


【解决方案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 的面。

【讨论】:

  • 嗨@ChrisCM,这是在欧几里得3空间还是在立方体表面?我想要后者。
  • 这不是一个坏方法。
  • @ChrisCM,假设它们在相邻的面上。如果他们在相同或相反的面上,问题很容易(我认为)。你如何展开?如果点位于边 2 和 6,则路径可能从 2 到 6,或从 2 到 1 到 6 或从 2 到 3 到 6,具体取决于几何形状。
  • 此解决方案假定您已对其进行规范化,以便“第 1 面”上至少存在一个点我实际上已经预料到此评论并且已经编辑了解决方案。
  • ChrisCM:看这个:i.imgur.com/J1aERBm.png -- 最短路径必须穿过前面,即使点在顶部和右侧。
猜你喜欢
  • 2021-08-06
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2020-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多