在我的程序中,我在面板上通过图形对象在面板上绘制了一组国际象棋平方(每个平方对象都有一个矩形对象定义其界限)。最近,我添加了一种在某些正方形上绘制线路的方法,以重点进行重点。问题是:我需要能够"擦除"这些行,似乎它是擦除一条线的唯一方法是重新绘制了该线路"影响"的正方形。
我想问,假设一条线从Pointa(X,Y)开始,然后在PointB(X,Y)停止,我该如何确定面板上的正方形以重新绘制?最好将每行分解为一系列点,然后检查哪个正方形包含任何点?如果是这样,我该怎么做?
我想您需要遍历每条线(因此保留它们的记录),并确定线路是否与顶部,右,左或底部边界相交矩形。毕竟,一旦绘制行,您就不需要使用任何行动来做任何事情,该行对象包含所需的所有信息,以推断该行是否相交矩形。我建议这样做的一件事(如果您还没有)是将对象存储在集合中,以便您可以迭代它们。
棋盘单元连接在一起,因此您无需检查所有单元格。只需沿线横穿并触摸细胞即可。请注意,此过程与线栅格化略有不同。
您需要计算第一个包含线起始点的单元格,然后使邻居单元格1逐一相交。例如,如果线路方向是正确的,请检查右和顶部的边缘等。
如果您知道有效性(大网格),请考虑amanatides和woo