如何绘制相似大小的重叠正方形?

时间:2020-01-04 09:14:38

标签: python matplotlib

我尝试使用matplotlib.pyplot绘制具有重叠正方形的图案。我不确定如何获得相同大小的所有正方形。

这是我的代码:

import matplotlib.pyplot as plt
plt.plot([2.2,2.2,3.5,3.5,2.2],[4.1,2.5,2.5,4.1,4.1],linestyle='solid',color="red")
plt.plot([3.2,4.2,4.2,3.2,3.2],[3.2,3.2,4.5,4.5,3.2],linestyle='solid',color="blue")
plt.plot([2.5,2.5,3.8,3.8,2.5],[1.8,3.8,3.8,1.8,1.8],linestyle='solid',color="green")
plt.plot([3.6,4.8,4.8,4.8,3.6,3.6],[2.2,2.2,0,0,0,2.2],linestyle='solid',color="black")
plt.title('square pattern')

2 个答案:

答案 0 :(得分:0)

这是一种获得所有相同大小的正方形的方法,其中矩形的面积之和等于正方形的面积之和。并且每个正方形都具有与矩形相同的中心。

每个矩形的面积是宽x高。将面积的总和除以矩形的数量即可得出平均面积。具有该区域的正方形的边是其平方根。

用于计算和绘制正方形的代码。原始矩形的绘制比较浅。

import matplotlib.pyplot as plt
from math import sqrt

colors = [ 'crimson', 'dodgerblue', 'limegreen', 'black']

rect1 = [[2.2,2.2,3.5,3.5,2.2],[4.1,2.5,2.5,4.1,4.1]]
rect2 = [[3.2,4.2,4.2,3.2,3.2],[3.2,3.2,4.5,4.5,3.2]]
rect3 = [[2.5,2.5,3.8,3.8,2.5],[1.8,3.8,3.8,1.8,1.8]]
rect4 = [[3.6,4.8,4.8,4.8,3.6,3.6],[2.2,2.2,0,0,0,2.2]]
rects = [rect1, rect2, rect3, rect4]

total_area = 0
for rect in rects:
    width = max(rect[0]) - min(rect[0])
    height = max(rect[1]) - min(rect[1])
    total_area += width * height
square_side = sqrt(total_area / len(rects))
half = square_side / 2

for rect, col in zip(rects, colors):
    center_x = (max(rect[0]) + min(rect[0])) / 2
    center_y = (max(rect[1]) + min(rect[1])) / 2
    plt.plot(rect[0], rect[1], color=col, linestyle='solid', alpha=0.2)
    plt.plot([center_x - half, center_x - half, center_x + half, center_x + half, center_x - half],
             [center_y + half, center_y - half, center_y - half, center_y + half, center_y + half],
             color=col, linestyle='solid')
plt.title('square pattern')
plt.gca().set_aspect('equal')
plt.show()

resulting plot

答案 1 :(得分:0)

这里有一些代码可以绘制4个相同大小的正方形。正方形由其左下位置表示。您可以更改这些坐标以轻松定位每个正方形。

import matplotlib.pyplot as plt
from math import sqrt

colors = [ 'crimson', 'dodgerblue', 'limegreen', 'black']

side = 2
square1 = [1, 1.3]
square2 = [2.1, 0.5]
square3 = [1.3, 1.6]
square4 = [1.7, 2.8]
squares = [square1, square2, square3, square4]

for square, col in zip(squares, colors):
    x = square[0]
    y = square[1]
    plt.plot([x, x + side, x + side, x, x],
             [y, y, y + side, y + side, y],
             color=col, linestyle='solid')
plt.title('square pattern')
plt.gca().set_aspect('equal')
plt.show()

resulting plot