0

总体目标:给定 3 维空间中的点列表,我需要在给定点半径的情况下围绕该点生成一个球体,然后以编程方式检查给定某个点的两个或多个球体之间是否存在空间。

问题:我无法考虑用数据结构来表示点网格(表示球体的中心)和周围的球体,这些可能并不总是孔数。

示例数据:
A 点:(-3, .25, 4) 半径:1.35
B 点:(5, 6.35, 1) 半径:2
C 点:(1, 0, -1) 半径:0.5

我最初的想法是有一个整数的 3 维数组,其大小是轴的最大值和最小值的绝对值相加除以您想要的最小精度。然后,您将使用转换因子将数组位置(整数)转换为您要查找的点的小数位置。然后我会用一些数据填充数组,以表示球体中心周围存在一个球体。

我正在寻找的是我应该用来表示这个非整数的 3d 网格的数据结构。我觉得我的技术不对。

这是在 Java 中。

非常感谢任何和所有帮助,谢谢!

4

2 回答 2

0

为什么不只用 3 个坐标 x、y、z(3d 点)和半径来表示它们,就像您列出它们并使用(3 维)距离来评估点是否在球体内一样?还是我错过了这里的用例?这听起来像:“检查给定某个点的两个或多个球体之间是否有空间”

于 2012-04-26T20:18:15.963 回答
0

本周早些时候我实际上做了一些非常相似的事情。我所做的是决定两个点允许的最小距离(如果我理解正确,可以通过添加两个球体的半径在这里找到)。使用它,我使用 (0, 0, 0) 处的起始球体创建了一个随机的球体场,然后在远离该位置的随机距离处逐渐添加额外的球体。因为在我的情况下(不确定你是否也需要这个)我也有一个最大距离,我只是移动了一个已经接受的球体的坐标并检查距离是否匹配。

所以,总结一下:

  1. 有一个起点
  2. 将一个点(在特定范围内)随机放置到您现有的点之一
  3. 检查它是否符合您的间距限制
  4. 重复 2-3 直到你有足够的球体。

希望这对任何人都有帮助。

于 2013-12-10T14:07:43.510 回答