如果您曾经使用过Blender,那么您就知道屏幕分割是如何工作的。基本上,如果屏幕完全共享边缘,您可以始终垂直向下或向左水平分割屏幕,并以相反的顺序合并。
我想实现这种功能并尝试了几种方法。最有希望的方法是以递归方式使用二叉树,就像将每个节点视为一个屏幕一样。例如,已经分割的那些具有表示"分割类型(水平或垂直)"的字符串值。在内部节点和叶子的实际子屏幕。节点中经过调整的遍历和屏幕尺寸信息允许我确定一个屏幕是否具有可合并的邻居(不仅仅是兄弟)。但事实证明,存在二进制树无法表示的配置。
一般来说,Blender使用什么样的数据结构将2d区域分成矩形块?特别是,他们是如何解决这个问题的?
无法配置的示例
合并前
______________
| | c |
|_________|____|
| | | d |
| |______|____|
|__|__|_a_|__b_|
合并 a - >之后的 B'/强>
______________
| | c |
|_________|____|
| | | d |
| |______|____|
|__|__|________|
合并后 d - > C
______________
| | |
|_________| |
| | | |
| |______|____|
|__|__|________|
没有边缘将屏幕切成两半。