四/八叉树数据结构的可视化

计算科学 可视化 数据结构 分区
2021-12-05 23:02:04

我有一个简单的 C++ 四叉树实现。该实现将节点细分为四个子节点,就好像该特定节点中有多个点一样。目前,我想可视化给定输入点的细分情况。

我发现了一个类似的问题,说我们可以使用可视化软件包,例如 ParaView、meshlab,但是怎么做呢?我读到我们可以简单地将其写为 VTK 文件中的非结构化网格,但这意味着什么?

2个回答

您需要在此处查找 VTK 文件格式:https ://vtk.org/wp-content/uploads/2015/04/file-formats.pdf

这不是很困难,您只需为四叉树的每个节点编写一个单元格。结果将看起来像您在此处此处此处看到的图片- 都使用 VTK 文件格式来可视化网格。

以以下可视化为例。它可视化了两个二叉树:TSTV分别用于球体的表面网格和球体的体网格。

二叉树可视化

在第 0 层,每棵树中只有一个节点:S1(0)V1(0). 括号中的上标表示树中的级别,下标表示该树级别的节点号。左边有网格的蓝色球体代表对应的整个表面网格S1(0),而右边的蓝色球体切割——体积网格对应于V1(0).

在第一级,表面和体积网格都被分割,因此是父节点S1(0)有两个孩子S1(1)S2(1),表示第一层的网格划分。它们以蓝色和红色显示在左侧的球体网格可视化中。等等。

这种可视化对于介绍示例并不理想(有一些非理想符号,考虑有两个网格,二进制而不是四叉树/八叉树)。但展示一种可视化网格分区的方法。网格分区是使用 Paraview 构建的(不幸的是,我不能分享它的代码,因为它是一个大型项目的一部分),但我会给你我的看法。

在此处输入图像描述

网格被写入VTK一次;但是,对于树中的每个级别,我都添加了ScalarData对应于该树级别的分区的节点号。有了它,我可以根据一定的水平给它上色。在可视化中,最右侧的视图处于活动状态,左侧的着色菜单显示所选的按级别 2着色

关于如何编码:我用 C++ 手动完成(不久前),使用老式的VTK 文件格式目前,有许多工具可以帮助您,包括python 接口


披露:上图取自

我是合著者。