2012-04-26 63 views
0

总体目标:给定三维空间中的点列表,我需要在给定点的半径的情况下围绕该点生成一个球体,然后在语法上检查两个球体之间是否有空间,或者给予某个点更多的领域。代表球体的三维网格

问题:我很难考虑用数据结构来表示一个网格点(代表球体的中心)和周围的球体,但这些并不总是孔数。

实施例的数据:
点A:(-3,0.25,4)半径:1.35
点B:(5,6.35,1)半径:2
点C:(1,0, - 1)半径:.5

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

我在找的是我应该用来表示这个非整数的三维网格的数据结构。我觉得我的技巧是不正确的。

这是用Java编写的。

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

回答

0

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

0

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

因此,要总结:

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

希望对任何人都有帮助。