【问题标题】:How to determine what rectangle is on top?如何确定顶部是哪个矩形?
【发布时间】:2013-03-25 03:36:18
【问题描述】:

我目前有一个绘制重叠矩形的程序,我想知道是否有一种简单的方法可以确定哪个形状在顶部(最明显)。这让我很难过,因为在处理 3D 时没有 z 轴可供使用。

我尝试遍历矩形并使用 .contains 方法,但它返回特定点下的所有矩形,而不是最高级别的矩形。

我也搜索过,但也许我使用了错误的关键字?

【问题讨论】:

  • 你能解释一下你所说的“最明显”是什么意思吗?您的意思是与其他矩形重叠的面积最少的矩形?
  • 大概是你渲染的最后一张
  • imgur.com/o4irIJl 在这种情况下,石灰绿色位于“顶部”。没有被其他方块重叠?
  • 我很确定石灰绿在“底部”。半熟的柠檬黄在上面。
  • 是的,我刚刚意识到 iv 使用了糟糕的颜色,抱歉

标签: java swing overlap rectangles


【解决方案1】:

通常当人们绘制代码时,他们会这样做:

列出矩形 = ....

for (int i = 0; i < rectangles.size(); i++)
    //paint the rectangle

因此,如果您想搜索一个 Point 以确定它在哪个 Rectanle 中,那么您应该使用:

for (int i = rectangles.size() - 1; i >= 0; i--)
{

    if (rectangles.get(i).contains(yourPoint))
    {
         // do something
         break;
    }
}

从头开始会给你最后绘制的矩形,这意味着它在所有其他矩形的顶部。

【讨论】:

  • 也许这会更好地解释我想要实现的目标? imgur.com/icjVomN 我让鼠标监听器按预期工作,并记录用户在屏幕上按下 x 和 y 的位置。从这些坐标中我如何判断顶部是什么?
  • 我给了你答案,只要确保 Point 是你绘制矩形的面板的坐标。
  • 好的,试试看,谢谢。抱歉,如果这个问题看起来很愚蠢,但现在是凌晨 4 点:D
  • 这个问题并不愚蠢,我只是不确定你为什么没有真正尝试这个建议。您已经有了循环代码,我只是建议您将循环更改为相反的顺序。您应该在一分钟左右完成的单行更改。然后要么它起作用(在这种情况下你可以去睡觉)或者它没有(在这种情况下你可以要求澄清)。当你提出问题时,不要害怕尝试。有时这个建议会奏效,但有时无论你通过尝试学到了什么都不管用。
  • 我对 2D 图形和摇摆不太感兴趣,而且解决方案如此简单让我感到惊讶。我已经实施了您的答案,并且运行良好。它还无意中解决了另一个问题,我试图清除矩形屏幕。看到这个解决方案让我意识到我可以清除矩形的arraylist,因为paintComponent 方法只是简单地遍历列表并打印包含的任何矩形。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 2020-11-01
  • 2022-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多