给出一个子矩形,如何将矩形的其余部分分成两部分,以使两个新矩形更"squarish"?
Give a sub-rectangle, how does one divide the remainder of a rectangle into two parts such that the two new rectangles are more "squarish"?
我有一个矩形R1,宽w1,高h1。
我有一个较小的矩形R2 (w2,h2),它的原点与R1相同。(0,0) .
如何将剩余的空间划分为两个矩形,使每个矩形的长度和宽度之差尽可能小(更方)?
这是我到目前为止所做的:给定R2,有四种可能:
- R2与R1的尺寸相同,在这种情况下没有子矩形。
- R2和R1一样宽,但没有R1那么高,在这种情况下,只有一个子矩形可能。
- R2和R1一样高,但没有R1那么宽-再次有一个可能的子矩形,就像情况(2)一样。
- R2没有R1那么高,也没有R1那么宽。在这种情况下两个子矩形是可能的。
在情况(4)中,有两种可能的方法来划分剩余空间:
- R3 (w h) = (w1-w2 h2)和R4 (w h) = (w1, h1-h2)
- R3 (w h) = (w1-w2 h1)和R4 (w h) = (w2, h1-h2)
我算出一个正方形的边长之比是1:1,所以长边与短边之比越小,它就越接近正方形。
问题是,有两个子矩形。那么,既然有两个矩形,我如何决定哪一对矩形更方呢?
编辑:如果R3和R4的比值都在1。都大于2。,那么显然是2。是方形的。但如果只有一个矩形(例如R3)比另一个矩形(R4)有更好的比率,而另一个矩形(R4)有更差的比率呢?这有可能吗?
编辑:把R3和R4在每种情况下的比值加起来,然后选择和更小的情况,这有意义吗?
我们有一个L形,所以我们想知道是垂直切割还是水平切割,以使矩形更"方形"。所谓"更方",我们指的是最小化周长。所以答案很简单。
相关文章:
- 为C++03编译器编写部分unique_ptr,该编译器与较新的编译器在公共代码库上运行
- 如何在加密++中将两个源组合成新的源
- C++两个对象,其中包含指向同一数组不同部分的指针
- 如何在 main 函数中输出两个新字符串C++?
- 如何在精灵表上的两个不同部分之间来回切换,同时用户仍使用 SFML 持有密钥
- 在单元测试中,如何在不使用 operator== 的情况下比较两个对象,这可能会错过新成员?
- 打印两个反向空心矩形,然后在其内部打印两条对角线
- C++将两个不同类型的向量的属性连接到新的向量中
- 如何从两个点创建矩形?
- 动态创建 std::string 时的两个"新"调用
- 如何将从用户那里获取的输入分成两部分,并将它们分配给C++中的两个不同的数组
- 为什么Qt(4.8)串口(qextserialport)分两部分从设备读取数据
- 无限数组C++在一个表达式中使用两个新值调整数组大小
- 在程序继续执行的同时,如何使代码的两部分之间存在时间间隔或延迟?C++
- 是否存在libcurl最大读取大小?Curl将阅读分成两部分
- 给出一个子矩形,如何将矩形的其余部分分成两部分,以使两个新矩形更"squarish"?
- 使用c++ Boost将字符串分成两部分
- 提高正则表达式.命名组分为两部分
- 这两种新语法有什么区别?
- 我想了解窗口(新矩形(30, 20))在以下代码中是如何工作的