【问题标题】:modelling 3d cells defined by intersections of surfaces建模由曲面交叉点定义的 3d 单元格
【发布时间】:2010-11-23 01:06:23
【问题描述】:

我正在尝试创建由任意曲面的交集定义的单元格的交互式 3d 表示。我很难弄清楚如何从中创建网格(或者有什么比我应该瞄准的网格更好的东西来表示 3d 体积?)。每个表面 s 由平面、球体、圆柱体、圆锥体等的解析表达式给出,如 s = f(x,y,z) = 0,例如这里的那些:

对于每个单元格,我都有一个表面列表和每个表面的 +/- 意义。有了这个,很容易确定 x,y,z 点是否位于单元格内,方法是将该点插入到每个边界表面的方程中,如果结果是所有 + 表面的 + 和 - 所有 - 表面的点位于里面。显然,如果任何表面的结果为零,则该点位于该表面上。

我可以测试数千个网格点,为每个单元格记下位于该单元格内的那些点,然后使用这些点的最外层为该单元格创建一个网格。但是,我有数千个细胞,这根本不够快。与其他单元格相比,许多单元格非常小或纵横比低,因此如果我要这样做,我需要一个非常精细的点网格。

任何人都可以提出一种将这种方式定义的单元格放入静态 3d 模型的有效方法吗?是否有任何类型的库可以使用这种可以为我构建 3d 网格的几何规范?我错过了什么明显的东西吗?

谢谢, 尼克

【问题讨论】:

    标签: 3d intersection modeling mesh geometry-surface


    【解决方案1】:

    作为一个一般问题,这是相当困难的:我认为它基本上是一个一般非线性规划问题。如果您的边界是由任意函数生成的,那么即使是一个这样的函数也可能有任意数量的单元格;如果没有更多关于函数的信息,我认为你不能比检查网格点做得更好。

    如果您对函数有所了解(例如,平面、球体、圆柱体和圆锥体都是圆锥曲线),您可能会做得更好。无论如何,您可能希望从组合方法开始;例如,给定任意 3 个边界,确定是否存在所有三个相交的点。

    在任何情况下,一旦您确定了单元格的角和边缘,您就可以使用基于网格的方法来构建显示网格 - 例如,使用轴对齐的平面对您的表面进行切片,以确定要显示的顶点和三角形发送到您选择的 3D 图形库。


    另一个想法:由于您通过f(x,y,z)=0 定义曲面,因此您可以从一堆点开始,然后使用牛顿法步骤或其他方法将它们数字迁移到附近的曲面上:

    point p = (x,y,z)
    scalar value = f(p)
    while abs(value) > epsilon:
      vector gradient = gradient_of_f(p)
      p -= gradient * (value / dot(gradient,gradient))
      value = f(p)
    

    类似的东西应该可以让你近似边缘和角点。可能更难弄清楚如何将这些类型的点连接到一个网格中,但是......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多