首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何表示/修改三维实体

如何表示/修改三维实体
EN

Stack Overflow用户
提问于 2010-10-08 07:03:46
回答 2查看 415关注 0票数 1

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

所以我的问题是,什么是一个好的通用数据结构来表示产生的3d对象,以及什么样的算法被用来从一个3d实体中减去另一个3D实体?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-08 07:29:41

这是一个非常普遍的问题,取决于你想知道关于固体的什么,以及你想要多快知道它。假设您只需要成员资格测试,这可能会起作用(psuedocode):

代码语言:javascript
复制
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)
    } 

}

这样做的好处是可以进行复合减法。例如,可以从solid A中减去solid B,然后从solid C中减去solid C,它将按预期工作。例如,如果有三个球体以原点和radius(A) < radius(B) < radius(C)为中心,您将获得包含在A中或包含在C中但不包含在B中的点。

例如,您还可以从球体中减去两个十二面体,然后将其减去一个立方体。这当然等同于从立方体中减去球体,然后再添加两个十二面体。

票数 1
EN

Stack Overflow用户

发布于 2010-10-08 07:19:48

我怀疑是否有一种标准的方式来表示那个级别的几何对象。

我记得Povray,一个开源的光线跟踪器,它有一种很好的文本语言来表示3D场景,并且包含了一套完整的几何操作(并集、交集等) "Constructive Solid Geometry";它相当灵活,但我怀疑它是否是您正在寻找的。此外,请记住,除了纯几何之外,光线跟踪器还需要处理一些更多的概念:纹理、灯光等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3886536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档