Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 我的矩形在二维正方形网格中接触多少个正方形?_Arrays_Algorithm_Geometry - Fatal编程技术网

Arrays 我的矩形在二维正方形网格中接触多少个正方形?

Arrays 我的矩形在二维正方形网格中接触多少个正方形?,arrays,algorithm,geometry,Arrays,Algorithm,Geometry,我遇到了以下谜团: 在我的2d正方形网格中,随机放置的给定矩形有多少个正方形 请注意,矩形当然可以旋转,这会使内容复杂化 示例-它接触4x6=24个正方形,但如果旋转,它将接触更多: 我的努力是: 检查每个正方形,查看每个肋骨是否与原始正方形相交。我见过一种非常优雅的方法来判断一条直线的两段是否相交,但我还是觉得有点难看 更好的方法是找到靠近原始A、b、c、d点的点,并对它们进行检查,直到得到一个不在矩形中的点。有一个很好的解决方案来确定一个点是否包含在一个矩形中。 然而,这里有很多边缘情况,

我遇到了以下谜团: 在我的2d正方形网格中,随机放置的给定矩形有多少个正方形

请注意,矩形当然可以旋转,这会使内容复杂化

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

我的努力是: 检查每个正方形,查看每个肋骨是否与原始正方形相交。我见过一种非常优雅的方法来判断一条直线的两段是否相交,但我还是觉得有点难看

更好的方法是找到靠近原始A、b、c、d点的点,并对它们进行检查,直到得到一个不在矩形中的点。有一个很好的解决方案来确定一个点是否包含在一个矩形中。
然而,这里有很多边缘情况,我不知道如何处理。

当旋转矩形时,计算接触的细胞可能是一个相当复杂的问题。但是你可以使用一种光栅化来获得所有被触摸的细胞

按Y排序顶点。获取顶部顶点。平行穿过两条入射边,计算每条扫描线中的单元数(最左边的单元表示左边缘,最右边的单元表示右边缘),直到遇到下一个顶点。再次使用相应的边继续

请注意,不能直接使用像Bresenham这样的线条绘制算法,因为它们不用于检测所有接触的单元格(尽管它们可能会被修改)

Amanatides和Woo的“用于光线跟踪的快速体素遍历算法”用于二维

例如:


为了寻找一个切实可行的解决方案,我将采用以下方法: 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+2+1)

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


我的意思是,你可以轮换它来寻求帮助,你最好展示自己的努力。对不起,现在我已经展示了我的努力。我相信你应该重新表述这个问题,加上Max这个词:在我的二维正方形网格中,一个给定的矩形,随机放置,有多少个正方形是最大的接触?我会说(天花板(宽度)+1)*天花板(高度)+1)。我相信旋转不会产生影响,因为你在三角形底部的松动会在顶部得到。Gassa和我有着相同的问题:清晰的问题陈述会被认可(我被问题所吸引)。我做了类似的事情,但是,运行这样的算法需要很长时间,因为你必须扫描所有可以将矩形放入网格中的选项。好的,我想你在根据放置的矩形搜索答案的地方,我想你已经改变了你的文本。尽管如此,我还是喜欢这个谜语,我将继续寻找最大平方数的数学答案。