c# - 将矩形拆分为 n 个较小的矩形并计算每个中心的算法

标签 c# algorithm math

我正在寻找一种简单的算法,给定一个宽度为 w 高度为 h 的矩形,将该矩形分成 n 个大小和形状大致相等的矩形,并计算这些矩形的中心。

编辑:忘记提及形状应尽可能类似于正方形。

有什么开始的提示吗?

最佳答案

一个简单的算法是垂直分割成 n 个大小相等的 strip ,高度为 h,宽度为 w/n。

如果您假设初始矩形的角为 (0,0) 和 (w,h),则使用此算法第 ith 矩形的中心点为 (w/n * (i + ½ ), h/2), 对于 0 <= i < n.


更新:尝试将数 n 分解为因子对 (i, j) 使得 i * j = n,并找到因子对使得因子的比值最接近边的比值的矩形。然后使用这两个因素创建较小矩形的规则网格。

例如,当 n 为 10 时,您可以在 (1, 10)、(2, 5)、(5, 2) 和 (10, 1) 之间进行选择。这是一个使用因子 (5, 2) 的示例网格:

------------------------------------
|      |      |      |      |      |
|      |      |      |      |      |
------------------------------------
|      |      |      |      |      |
|      |      |      |      |      |
------------------------------------

如果您的初始矩形的宽度为 60,高度为 20,那么使用因子对 (5, 2) 将得到十个大小为 (60/5, 20/2) = (12, 10) 的矩形,接近正方形。

关于c# - 将矩形拆分为 n 个较小的矩形并计算每个中心的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4913714/

相关文章:

c# - IEnumerable<string> System.ObjectDisposedException

c# - 我们应用程序中的主机单元测试框架? (Nunit、xUnit、MsTest)

math - 使用三次贝塞尔曲线作为直线 : where do the control points have to be located to get equidistant spacing for t

javascript - 向服务/产品添加百分比的正确方法是什么?

c# - 在 C# 中将字符串列表添加到 OracleCommand.Parameters

c# - UWP - XDocument 等效于 XMLNodeList

c# - 在大图像中查找 16x16 像素相同正方形的有效算法 - C#

algorithm - 在多维数组中查找相似性

algorithm - 如何在不直接乘以数字的情况下计算 2^32?

algorithm - 简单方程求解