【问题标题】:How do I make two rectangles move out of eachother?如何让两个矩形相互移开?
【发布时间】:2011-03-23 04:40:07
【问题描述】:

假设我有两个像这样相互重叠的矩形......

alt text http://filebox.me/files/u8atnxd34_overlap1.png

我希望他们以这样的方式结束......

alt text http://filebox.me/files/jt8ef1t44_overlap2.png

如何计算我需要添加的位置以使矩形相互移开?

注意:我确实找到了this 问题,但它并没有告诉我如何实际移动矩形。

每个人都假设我想向下移动矩形,但实际上我希望矩形向最合乎逻辑的方向移动。因此,如果矩形完全位于第一个矩形的右侧并向左移动 1 个像素,则它不会向下移动,而是向右移动。

【问题讨论】:

  • 你想让他们往哪个方向移动?
  • 您是否编写了一些代码来尝试解决这个问题?还是您希望我们为您编写所有内容??
  • @Tim Robinson:嗯,基本上是两个矩形中心之间的方向。 @Grant Crofton:如果我不知道如何编写代码,我将如何编写代码?检查交叉路口很容易,但移动它们是另一回事。
  • 请定义“最符合逻辑的方向”。
  • @Dlaor 我认为您会发现暂时忽略代码并考虑矩形的各种组合以及其中一个应该如何移动会很有帮助。换句话说,在开始思考如何编写代码之前,先在纸上做练习。

标签: c#


【解决方案1】:

只需从第二个矩形向任意方向移动第一个矩形。

【讨论】:

    【解决方案2】:

    在您显示的确切配置中:

    其中 a = 是前景矩形,b = 背景三角形。

    a.Top = b.Bottom; // Add +1 to have it just past the bottom.
    

    【讨论】:

      【解决方案3】:

      rectangle2.top = rectangle1.bottom+1 (javascript)

      【讨论】:

        【解决方案4】:

        更简单:

        将第一个矩形底部的 Y 坐标设置为第二个矩形顶部的 y 坐标

        【讨论】:

          【解决方案5】:
          __________
          |    ____|____
          | A |    |    |
          |___|____|    |
              |      B  |
              |_________|
          
          if [ 
               (TopLeftOfA.Y + A.Height - TopLeftOfB.Y)
               < 
               (TopLeftOfA.X + A.Width  - TopLeftOfB.X)
             ]
              TopLeftOfB.Y = TopLeftOfA.Y + A.Height
          else 
              TopLeftOfB.X = TopLeftOfA.X + A.Width
          

          【讨论】:

          • 我会接受这是最好的答案,但它只有在 B 位于 A 的右侧和/或下方时才有效。
          • 所有其他职位的解决方案都类似:) 你可以自己做。
          • 我只是……想不通。我无法在脑海中塑造可能的坐标。能否请您发布其他两个方面的代码?
          猜你喜欢
          • 2014-12-24
          • 1970-01-01
          • 2010-09-23
          • 2023-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-08
          • 1970-01-01
          相关资源
          最近更新 更多