2015-02-23 57 views
-4

我需要导出宽度和高度定在C#的区域大小。 宽度和高度需要尽可能接近正方形的整数。 例如 - Area = 100 - > Width = 10,Height = 10 Area = 162 - > Area = 162 - > Width = 18,Height = 9.最近的矩形/正方形给定面积大小

我该怎么办?

+1

如果我理解了你,我可以给出建议:获得一个数字的根,然后四舍五入。这将是一个给定尺寸的粗略近似值(它将接近正方形)。 – netwer 2015-02-23 10:26:52

+0

但是,举个例子,如果你取162 - 四舍五入的根是13,那么162/13 = 12.46 - 不好,因为它不是一个整数。 – Udi 2015-02-23 11:09:42

+0

为什么不使用'RectangleF'?要找到最接近匹配的整数对,你可以写一个简单的循环.. – TaW 2015-02-23 14:26:56

回答

4

给这段代码片段作为一个int片段,它将宽度和高度计算为整数,例如width * height ==区域,它尽可能接近正方形。

int width; 
for (width = (int)Math.Ceiling(Math.Sqrt(area)); width > 1; --width) { 
    if (area % width == 0) break; 
} 
int height = area/width; 

注意:我不是C#程序员。从最佳满足要求的角度来看,这是最优的,但它在运行时并不是最好的。这个解决方案是O(sqrt(面积)),这并不是很好,因为在一个int中面积可以是2^n的数量级。如果价格太贵,您可以查看Integer Factorization以获取更复杂的计算宽度的方法。

相关问题