hahadaxiao 发表于 2023-4-23 22:07:26

请问一个矩形内可以放N*M个小矩形,怎么写算法呀

本帖最后由 hahadaxiao 于 2023-4-23 22:09 编辑

假设有一个880mm*590mm的矩形(A),自定义一个N*M的矩形(B),每个矩形B中间间隔5mm
(1)矩形A里面可以摆放多少个矩形B?
(2)如果矩形B可以旋转90度,也就是说,N*M,还是M*N的矩形可以摆放数量最多

sfqxx 发表于 2023-4-23 22:21:35

假设n、m为矩形b的长和宽,经过每个矩形b之间5mm的间隔,则每个矩形b所占的实际宽度为n+5mm,所占的实际长度为m+5mm。

## part 1:矩形b不旋转

在这种情况下,只需将矩形b横向或纵向放置都可。因此可以算出在矩形a中,横向能放置的矩形b的最大数量为:

$$
floor(\frac{880mm}{n+5mm}) * floor(\frac{590mm}{m+5mm})
$$

其中 $floor$ 表示向下取整,同理,纵向能放置的矩形b的最大数量为:

$$
floor(\frac{880mm}{m+5mm}) * floor(\frac{590mm}{n+5mm})
$$

需要注意的是,在实际中选择直接扣除 5mm 来计算会存在一些边角问题,可以采用等效求解的方法,将 880mm和 590mm分别减去两侧间隔总和 (n-1)\times5mm 和 (m-1)\times5mm 后再计算即可。

## part 2:矩形b可旋转

在这种情况下,矩形b分为两种摆法:横向、纵向。 需要分两种情况来计算:

#### case 1: n <= m

* 纵向方案:每个矩形b所占宽度为 $n+5mm$ , 长度为 $m+5mm$,则横向能放置的数量为:


floor(\frac{880mm}{n+5mm}) * floor(\frac{590mm}{m+5mm})


* 横向方案:每个矩形b所占宽度为 $m+5mm$ , 长度为 $n+5mm$,则横向能放置的数量为:


floor({880mm}{m+5mm}) * floor(\frac{590mm}{n+5mm})


在这两种情况下,取数量最大值即为可摆放的最多矩形b数量。

#### case 2: n > m

* 纵向方案:每个矩形b所占宽度为 $n+5mm$ , 长度为 $m+5mm$,则横向能放置的数量为:


floor({880mm}{n+5mm}) * floor(\frac{590mm}{m+5mm})


* 横向方案:每个矩形b所占宽度为 $m+5mm$ , 长度为 $n+5mm$,则横向能放置的数量为:


floor(\frac{880mm}{m+5mm}) * floor(\frac{590mm}{n+5mm})


同样地,在这两种情况下,取数量最大值即为可摆放的最多矩形b数量。

需要注意的是,这里的长度和宽度是指矩形b在摆放时所占据的空间大小,而不是矩形本身的长和宽。同时,也需要考虑实际问题中可能存在的边角误差,使得计算与实际布局更加接近。

isdkz 发表于 2023-4-23 22:27:57

要计算矩形A中可以放置多少个矩形B,我们需要将矩形A的长和宽分别减去间隔,然后除以矩形B的长和宽。在这个问题中,间隔为5mm。我们可以使用如下算法来计算:

def calculate_max_rectangles(a_width, a_height, b_width, b_height, gap):
    effective_a_width = a_width - gap
    effective_a_height = a_height - gap

    horizontal_count = (effective_a_width // (b_width + gap)) * (effective_a_height // (b_height + gap))
    vertical_count = (effective_a_width // (b_height + gap)) * (effective_a_height // (b_width + gap))

    return max(horizontal_count, vertical_count)

a_width = 880
a_height = 590
b_width = 0# 请替换为实际的矩形B宽度
b_height = 0# 请替换为实际的矩形B高度
gap = 5

max_rectangles = calculate_max_rectangles(a_width, a_height, b_width, b_height, gap)
print("最多可以摆放矩形B的数量:", max_rectangles)


请将`b_width`和`b_height`替换为实际的矩形B的宽度和高度。这个算法会返回两种摆放方式(横向和纵向)下的最大矩形B数量。
页: [1]
查看完整版本: 请问一个矩形内可以放N*M个小矩形,怎么写算法呀