如何确定Line是否通过Rectangle

时间:2017-10-02 23:49:05

标签: c# math graphics logic

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

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

2 个答案:

答案 0 :(得分:0)

我想你需要迭代每一行(所以保留它们的记录),并确定这些线是否与矩形的顶部,右侧,左侧或底部边界相交。一旦它们被绘制,你就不需要对这些线做任何事情,毕竟,线对象包含了推断线是否与矩形相交所需的所有信息。我建议做的一件事(如果你还没有),是将对象存储在一个集合中,这样你就可以遍历它们。

答案 1 :(得分:0)

棋盘格细胞连接在一起,因此您无需检查所有细胞。只需沿着线移动并触及细胞。请注意,此过程与行光栅化略有不同。

您需要计算包含行起始点的第一个单元格,然后逐行获取相邻单元格。例如,如果行方向是右上方,则检查右边和上边缘,依此类推。

如果您了解有效性(大网格),请考虑非常有效的Amanatides and Woo

算法