将矩形拆分成相等大小的矩形?

Kri*_*oks 11 c cgrect

我需要将一个矩形(一个CGRect结构{{float x,float y},{float w,float h}})拆分成许多较小的矩形/结构,从而创建某种网格.我正在写一个窗口布局管理器,我想要一个窗口预览选项.

在此输入图像描述

我看到了类似的问题,但没有任何的算法,我看到(涉及那些ceilfloor)工作.我也尝试过:

float widthOfNewRect = total.size.width / floor(sqrt(n));
float heightOfNewRect = total.size.height / ceil(sqrt(n));
Run Code Online (Sandbox Code Playgroud)

有人可以用C中的结构提供一个例子吗?

Aas*_*set 11

根据您的上一条评论,我假设您要将矩形拆分为相等大小的n个子矩形,并且它们应该以行数和列数相等的方式对齐(最后一行可能不是被完全填满).如果是这样,您可以使用ceil(sqrt(n))计算列数(因为这显然是您猜测的,所需的列数最少,以便没有比列多的行).然后,为了容纳分布在numColumns列中的n个元素,您需要的行数将由.给出.ceil(n / (double)numColumns)

至于你展示的代码:它不起作用的原因是(你可能发现自己)floor(sqrt(n)) * ceil(sqrt(n))可能小于n ; 例如,这是n = 7的情况.我建议的计算是(间接)发现行数是否应该是ceil(sqrt(n))或更安全的方法floor(sqrt(n)).