algorithm - 如何表示/修改 3d 实体

标签 algorithm data-structures 3d subtraction solid-bodies

在我的程序中,我有一些立方体(简单、xyz 位置、xyz 大小)。我希望 bo 能够从其中一个立方体中“减去”另一个立方体。

那么我的问题是,什么是表示生成的 3d 对象的良好通用数据结构,以及使用哪种算法从另一个 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 .

例如,您还可以从球体中减去两个十二面体,然后将其减去立方体。这当然与从立方体中减去球体并添加两个十二面体是一样的。

关于algorithm - 如何表示/修改 3d 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3886536/

相关文章:

algorithm - 搜索的时间复杂度

algorithm - 维护二叉树中的列表顺序

c - 不按唯一键搜索哈希表

python - 如何解析一个 STIX 模式以生成 OR 逻辑的多模式?

c - 不使用指针的堆栈实现

opengl - GL_DEPTH_TEST 和透明纹理的渲染故障

algorithm - 具有两个参数的递归函数的返回值

c++ - 使用 VBO 的 OpenGL 绘图

java - 如何使用 php 创建 3D 图像?

php - 按给定数字查找数字