在我的程序中,我有一些立方体(简单,xyz 位置,xyz 大小)。我希望 bo 能够取出其中一个立方体并从中“减去”另一个立方体。
所以我的问题是,什么是一个好的通用数据结构来表示生成的 3d 对象,以及使用什么样的算法从另一个中减去 3d 实体?
在我的程序中,我有一些立方体(简单,xyz 位置,xyz 大小)。我希望 bo 能够取出其中一个立方体并从中“减去”另一个立方体。
所以我的问题是,什么是一个好的通用数据结构来表示生成的 3d 对象,以及使用什么样的算法从另一个中减去 3d 实体?
这是一个非常笼统的问题,取决于您想了解有关固体的内容以及您想了解它的速度。假设您只想要成员资格测试,这可能有效(伪代码):
class Solid {
Solid solids = [] // each Solid has a list of solids that
// have been subtracted from it.
abstract method containedInSelf(point) {
// this will obviously vary from one type of solid to another
}
method contains(point) {
if !containedInSelf(point) return False;
else {
for solid in solids { // loop over all contained solids
if solid.contains(point) return False;
// point is contained in a solid that has been subtracted from it
}
// Now we know that point is contained but not contained in anything
// that's been subtracted
return True;
}
}
method subtract(solid) {
solids.append(solid)
}
}
这具有允许复合减法的优点。例如,您可以从实体中减去实体,然后A
从实体中减去实体,它会按预期工作。例如,三个球体以原点和 为中心,您将获得包含在或包含在但不包含在 中的点。B
B
C
radius(A) < radius(B) < radius(C)
A
C
B
例如,您还可以从球体中减去两个十二面体,然后将其减去到立方体中。这当然与从立方体中减去球体并添加两个十二面体相同。