【问题标题】:Compute the volume of a constructive solid geometry计算构造立体几何的体积
【发布时间】:2017-02-07 02:25:17
【问题描述】:

我有一个可以切割立方体的椭圆体的构造立体几何。我需要计算多孔立方体的体积。我该怎么做?

【问题讨论】:

    标签: computational-geometry csg


    【解决方案1】:

    总是有愚蠢的近似解决方案。为此,您只需要一个判断函数,一个点是否在椭圆体内。

    保留一个立方体

    • 维度(可能只有一次在类外,外维度)
    • 填充:状态:空、填充、混合
    • 如果混合 8 个子 Cube-s
    • 有一个最小块大小

    然后用椭球填充会分裂立方体,混合立方体(有点填充)需要分裂以进行更精确的计算。

    算法本身可能会有所不同。重新缩放到 (0, 0, 0) - (2”, 2”, 2”) 可能会很有用,因为这些块会对空间进行“对数除法”。

    在这个计算结束时,有一个近似值,甚至知道误差范围(填充的总和 + 混合总和的一半)。


    一种方法是从整个多维数据集递归,检查与 8 个子多维数据集的重叠:

    • 当立方体的所有 8 个角都在椭球内时,它会被填充,您无需进一步递归到最小块大小。
    • 当所有 8 个角都在外面并且椭球的中心不在里面时,它是空的,递归结束。

    【讨论】:

    • 嗨 Joop 我没有完全理解你提出的算法。 “维度(可能只在课堂外一次)”是什么意思。如果状态是空的、填充的、混合的,你如何稳健地检查?如果我以盒子的中心为例并检查椭圆体,可能会出现我变空但盒子仍然与椭圆体共享一个体积的情况。
    • Cube实例的维度不需要存储为字段,可以从顶部Cube递归计算。作为递归方法的参数。减少数据大小。
    • 嗨 Joop 我现在对构建和八叉树思考了很多,但我仍然不知道如何检查八叉树中的立方体是空的/填充的还是混合的。我拥有的工具是检查一个点是否在椭圆体内。现在,如果我想获得八叉树立方体(例如立方体 A)的状态,我想在立方体 A 中引入一个点网格,点之间的全局最小块大小的距离相等。现在我会检查所有点是否在椭圆体内。但这是与体素离散几何相同的方法。那我哪里想错了?
    • 很好,你知道常见的数据结构,即八叉树。我不想用在技术方面有点重的数据结构击败初学者,没有面向目标的用法,
    • 嗨,乔普,感谢您的增强描述,但仍然使用这种方法,我们会错过很多在椭球内只有一点体积的立方体。考虑旋转椭球的尖端与立方体面中间的立方体相交的情况,此时尖端本身尚未位于立方体中心。所以我不得不再次使用小立方体来规避这让我回到体素。我想最好做类似椭圆盒相交测试的事情。那么这在计算上将是昂贵的。所以再次回到体素:(或者我错过了什么。
    猜你喜欢
    • 2013-08-09
    • 2011-03-14
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    相关资源
    最近更新 更多