我有一个简单的 C++ 四叉树实现。该实现将节点细分为四个子节点,就好像该特定节点中有多个点一样。目前,我想可视化给定输入点的细分情况。
我发现了一个类似的问题,说我们可以使用可视化软件包,例如 ParaView、meshlab,但是怎么做呢?我读到我们可以简单地将其写为 VTK 文件中的非结构化网格,但这意味着什么?
我有一个简单的 C++ 四叉树实现。该实现将节点细分为四个子节点,就好像该特定节点中有多个点一样。目前,我想可视化给定输入点的细分情况。
我发现了一个类似的问题,说我们可以使用可视化软件包,例如 ParaView、meshlab,但是怎么做呢?我读到我们可以简单地将其写为 VTK 文件中的非结构化网格,但这意味着什么?
您需要在此处查找 VTK 文件格式:https ://vtk.org/wp-content/uploads/2015/04/file-formats.pdf
这不是很困难,您只需为四叉树的每个节点编写一个单元格。结果将看起来像您在此处或此处或此处看到的图片- 都使用 VTK 文件格式来可视化网格。
以以下可视化为例。它可视化了两个二叉树:和分别用于球体的表面网格和球体的体网格。
在第 0 层,每棵树中只有一个节点:和. 括号中的上标表示树中的级别,下标表示该树级别的节点号。左边有网格的蓝色球体代表对应的整个表面网格,而右边的蓝色球体切割——体积网格对应于.
在第一级,表面和体积网格都被分割,因此是父节点有两个孩子和,表示第一层的网格划分。它们以蓝色和红色显示在左侧的球体网格可视化中。等等。
这种可视化对于介绍示例并不理想(有一些非理想符号,考虑有两个网格,二进制而不是四叉树/八叉树)。但展示了一种可视化网格分区的方法。网格分区是使用 Paraview 构建的(不幸的是,我不能分享它的代码,因为它是一个大型项目的一部分),但我会给你我的看法。
网格被写入VTK一次;但是,对于树中的每个级别,我都添加了ScalarData对应于该树级别的分区的节点号。有了它,我可以根据一定的水平给它上色。在可视化中,最右侧的视图处于活动状态,左侧的着色菜单显示所选的按级别 2着色。
关于如何编码:我用 C++ 手动完成(不久前),使用老式的VTK 文件格式。目前,有许多工具可以帮助您,包括python 接口。
披露:上图取自
我是合著者。