在2d空间中,我们有一组矩形。
这是一张图片:
右边的垂直线是不可移动的“墙”。左侧的箭头表示移动方向。我需要向左移动最左边的矩形。
我需要将最左边的矩形向右移动X个单位,将所有东西推向右边。
有两个问题:
其他并发症:
您不能将Y坐标和矩形高度用于任何事物,而是每个矩形都有一个矩形列表(实现为指针),如果您继续向右移动它将会击中它,您只能检索x坐标,宽度和最小宽度。此数据模型无法更改。 (从技术上讲,在2d中将其重新表示为一组矩形是简化)
重要提示:来自不同级别和分支的子项可以在“潜在冲突”列表中具有相同的矩形。这是初始图片,指针显示为红线:
我该怎么做?
我知道一种愚蠢的方式(这会起作用)来解决这个问题:迭代地。即
这将解决问题,但如果X很大,这种迭代解决方案可能会很慢。有没有更好的方法来解决它?
想到一个可能的解决方案:
你说每个矩形都有指向它向右移动时会击中的所有物体的指针。我建议,从大矩形(箭头所指的那个)中取出指针列表,取出它所有的节点(它会碰撞的矩形),找到最小宽度,然后对所有子节点做同样的事情,添加递归地每个分支的宽度。像树深度问题一样对待问题。每个节点都有一个最小宽度值,因此您的问题的答案将是墙与大矩形右边缘的x值之间的距离减去矩形最小宽度的最大总和。创建一个向量,其中存储树的每个分支的深度(最小宽度的总和)并找到最大值。距离减去最大值是你的答案。
用4个盒子想象相同的图片。一个在左边,一个在右边,然后在墙上。我们将它们命名为方框1,方框2(中间顶部),方框3(中间底部)和最后一个方框4(右侧)。每个盒子的宽度都是4.除了左边的盒子外,所有盒子都可以收缩。框2可以缩小2,框3可以缩小1,框4可以缩小2.计算2个分支给*分支1:2 + 2 = 4 *分支2:3 + 2 = 5 *仅关注分支2因为分支1比分支2少,因此将适合与分支2平行的空间,并且可以缩小那么多。