我的矩形在2D正方形网格中接触多少个正方形?

时间:2018-08-05 13:23:59

标签: arrays algorithm geometry

我遇到了以下难题: 给定矩形随机触摸我的二维正方形网格中有多少个正方形?

请注意,矩形当然可以旋转,这会使事情变得复杂。

示例-触摸4x6 = 24个正方形,但是如果我旋转,它将触摸更多:

enter image description here

我的努力是: 遍历每个正方形,查看每个肋骨是否与原始正方形相交。我已经看到了一种非常优雅的方式来查看一条线的两个部分是否相交,但是我仍然认为它有点难看。

一种更好的方法是找到与原始a,b,c,d点接近的点,然后遍历它们,直到得到不在矩形中的点。有一个优雅的解决方案来查找矩形中是否包含点。 但是,这里有很多不确定的情况,我不确定该如何处理。

2 个答案:

答案 0 :(得分:0)

旋转矩形时,计算触摸的单元格可能是一个相当复杂的问题。但是您可以使用一种栅格化方法来获取所有接触的像元。

将顶点按Y排序。获得顶部顶点。平行经过两个入射边,计算每条扫描线中的像元(最左边的像元为左边缘,最右边的像元为右边缘),直到遇到下一个顶点。再次使用相应的边缘。

请注意,您不能直接使用像Bresenham这样的画线算法,因为它们并不是要检测所有触摸的单元(可能会被修改)。

Here is article的Amanatides和Woo的“用于射线跟踪的快速体素遍历算法”用于2D。 Practical implementation

示例:

enter image description here

答案 1 :(得分:0)

寻找一个切实可行的解决方案,我将采用以下方法: 1.在(旋转的)矩形(R1)周围绘制一个矩形(r2)。 R1触摸的正方形是r2减去剩余的所有正方形。

2a。从左下角开始,然后向右移动一个方块,直到到达c1

2b。对于每个正方形,计算完整正方形,向上移动直到触摸R1。 (即4 + 3 + 2 + 1)

3a。从右下角开始,然后每次向左移动一个正方形,直到到达c1。

3b。对于每个正方形,计算完整正方形,向上移动直到触摸R1。 (3 + 2 + 1)

4次重复 (2 +1)+(4 + 3 +1 2)

R1取值= r2-上面计算的平方=(8 * 8)-(10 + 6 + 3 + 10)= 35

Calc squares