我遇到了以下难题: 给定矩形随机触摸我的二维正方形网格中有多少个正方形?
请注意,矩形当然可以旋转,这会使事情变得复杂。
示例-触摸4x6 = 24个正方形,但是如果我旋转,它将触摸更多:
我的努力是: 遍历每个正方形,查看每个肋骨是否与原始正方形相交。我已经看到了一种非常优雅的方式来查看一条线的两个部分是否相交,但是我仍然认为它有点难看。
一种更好的方法是找到与原始a,b,c,d点接近的点,然后遍历它们,直到得到不在矩形中的点。有一个优雅的解决方案来查找矩形中是否包含点。 但是,这里有很多不确定的情况,我不确定该如何处理。
答案 0 :(得分:0)
旋转矩形时,计算触摸的单元格可能是一个相当复杂的问题。但是您可以使用一种栅格化方法来获取所有接触的像元。
将顶点按Y排序。获得顶部顶点。平行经过两个入射边,计算每条扫描线中的像元(最左边的像元为左边缘,最右边的像元为右边缘),直到遇到下一个顶点。再次使用相应的边缘。
请注意,您不能直接使用像Bresenham这样的画线算法,因为它们并不是要检测所有触摸的单元(可能会被修改)。
Here is article的Amanatides和Woo的“用于射线跟踪的快速体素遍历算法”用于2D。 Practical implementation。
示例:
答案 1 :(得分:0)