【问题标题】:How to determine whether a Line runs through a Rectangle如何判断一条线是否穿过一个矩形
【发布时间】:2023-03-31 10:32:01
【问题描述】:

在我的程序中,我有一组由 Graphics 对象在面板上绘制的棋子(每个 Square 对象都有一个定义其边界的 Rectangle 对象)。我最近添加了一种在一些正方形上画线的方法以强调。问题是:我需要能够“擦除”这些线条,似乎擦除线条的唯一方法是重新绘制受线条“影响”的正方形。

我想问一下,假设一条线从PointA(x, y) 开始,到PointB(x, y) 停止,我如何确定面板上要重绘的方格?是否最好将每条线解析为一系列点,然后检查哪个 Square.Rectangle 包含任何点?如果是这样,我该怎么做?

【问题讨论】:

标签: c# math graphics logic


【解决方案1】:

我想您需要遍历每条线(因此记录它们),并确定这些线是否与矩形的顶部、右侧、左侧或底部边界相交。绘制线条后,您无需对线条进行任何操作,毕竟线条对象包含推断线条是否与矩形相交所需的所有信息。我建议做的一件事(如果您还没有这样做的话)是将对象存储在集合中,以便您可以遍历它们。

【讨论】:

    【解决方案2】:

    棋盘单元格连接在一起,因此您无需检查所有单元格。只需沿线遍历并触摸单元格。请注意,此过程与线光栅化略有不同。

    您需要计算包含线起点的第一个单元格,然后得到与线一个接一个相交的相邻单元格。例如,如果线条方向是右上,则检查右边缘和上边缘等等。

    如果你知道有效性(大网格),考虑Amanatides and Woo相当有效的算法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 2022-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      相关资源
      最近更新 更多