“这是什么意思?”;“维护拓扑”;在3D网格中? 我试图在C++中创建一个非常简单的3D建模应用程序。在此过程中,我决定为半边数据结构实体边界表示实现一个类

“这是什么意思?”;“维护拓扑”;在3D网格中? 我试图在C++中创建一个非常简单的3D建模应用程序。在此过程中,我决定为半边数据结构实体边界表示实现一个类,3d,geometry,mesh,modeling,topology,3d,Geometry,Mesh,Modeling,Topology,我正在读的一本书(计算几何导论)详细介绍了V-E+F=2的形式,以及它如何适用于所有拓扑有效的凸多面体(暂时忽略面部孔和属) 为了保持这个公式的真实性,这本书描述了如何使用计算机生成固体。例如,我可以开始使用mvfs生成一个新实体,意思是“生成顶点面实体”,这将创建一个新实体,其中包含一个顶点和一个面,使得V-E+F=1-0+1=2。其他每一个运算,如果它加上V或F,也加上E,或者如果它从V或F中取,也从E中取,等等,所以这个公式总是正确的。正如wikipedia页面所说:“Euler操作符根据

我正在读的一本书(计算几何导论)详细介绍了V-E+F=2的形式,以及它如何适用于所有拓扑有效的凸多面体(暂时忽略面部孔和属)

为了保持这个公式的真实性,这本书描述了如何使用计算机生成固体。例如,我可以开始使用mvfs生成一个新实体,意思是“生成顶点面实体”,这将创建一个新实体,其中包含一个顶点和一个面,使得V-E+F=1-0+1=2。其他每一个运算,如果它加上V或F,也加上E,或者如果它从V或F中取,也从E中取,等等,所以这个公式总是正确的。正如wikipedia页面所说:“Euler操作符根据简单规则修改网格图,创建或删除面、边和顶点,同时保留整体拓扑,从而保持有效边界(即不引入孔)。”

我的问题有两方面

  • 首先,我怎么可能说Euler公式适用于我的特定半边数据结构意味着我有一个有效的边界,当我可以有一些东西,比如没有任何边或相邻顶点的悬挂面(记住mvfs创建一个顶点和一个面)。具有单个顶点和单个面的网格听起来不像是有效边界

  • 即使像那些有一个顶点和一个边界的实体是合理有效的边界,为了保持欧拉公式的真实性而付出这样的努力又有什么意义呢?如果我希望能够创建一个带有孔的半边数据结构网格,该怎么办?HEDS表示法的要点似乎是易于操作(这对于我的小型建模者来说是完美的),但我似乎不愿意让用户删除面,例如,基于维护有效拓扑非常重要,存在一些笨拙的Euler操作符。操作员 这需要始终一次创建或删除两个向量/边/面,而不是单独一次创建或删除一个


  • 作为一名程序员,如果你想要的话,你需要确保你有定义良好的边界。选择“明确界定的边界”对你的目的的确切含义也是你的工作,你有责任保持这种方式,只要你想保持它们

    对于问题1:你在维基百科上的引用并没有说欧拉公式暗示了一个有效的边界。相反,它表明Euler操作(不是公式,只是保留它的一组特定操作)将保留拓扑和边界

    对于问题2:如果您想要在对象上打洞,请提供一个!但是,打破事物比修复它们更容易。某些网格使用依赖于拓扑和有效边界等属性,因此您通常希望避免意外破坏它们


    因为这些属性可能很有用,而保留它们可能很棘手,所以值得注意那些固有地保留属性的操作集。对于不打算在对象上打孔的网格算法,一组无法做到这一点的构建块操作可能很方便。

    嘿,有趣的问题,这有帮助吗?我不这么认为。这是在指定某种网格中面、顶点和边的数量之间的关系(我仍然不知道为什么关联这些数量有任何意义)。这非常依赖于应用程序。如果您正在创建一个建模工具,那么保留拓扑可能是不可取的(因为这大大限制了设计者可以做的事情)。另一方面,如果要为曲面创建处理算法(例如,平滑或重网格),则可能希望保留该曲面的拓扑(即,不引入比已存在的孔更多的孔,不拆分组件,不生成隧道等)。