48 lines
2.0 KiB
Python
48 lines
2.0 KiB
Python
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
# Define the dimensions of the trapezoid
|
|
base1 = 5
|
|
base2 = 3
|
|
height = 4
|
|
|
|
# Calculate the width of the rectangle that can be cut from each side of the trapezoid
|
|
rect_width = (base1 + base2) / 2
|
|
|
|
# Cut off two rectangles from the trapezoid
|
|
trap_points = np.array([[0, 0], [base1, 0], [base1, height], [0, height]])
|
|
rect_points = np.array([[0, 0], [rect_width, 0], [rect_width, height], [0, height]])
|
|
trap_cut_points = np.array([[rect_width, 0], [base2, 0], [base2, height], [rect_width, height]])
|
|
|
|
# Plot the original trapezoid and cut off rectangles
|
|
plt.fill(trap_points[:, 0], trap_points[:, 1], color='gray')
|
|
plt.fill(rect_points[:, 0], rect_points[:, 1], color='blue')
|
|
plt.fill(trap_cut_points[:, 0], trap_cut_points[:, 1], color='blue')
|
|
|
|
# Calculate the size of the remaining triangle
|
|
triangle_width = base2 - rect_width
|
|
triangle_height = (base2 * height) / base1
|
|
|
|
# Cut off the triangle from the trapezoid
|
|
tri_points = np.array([[rect_width, 0], [base2, 0], [(base2 + rect_width) / 2, height]])
|
|
tri_cut_points = np.array([[(base2 + rect_width) / 2, 0], [(base2 + rect_width) / 2, triangle_height], [rect_width, triangle_height]])
|
|
|
|
# Plot the remaining triangle and cut off triangles
|
|
plt.fill(tri_points[:, 0], tri_points[:, 1], color='green')
|
|
plt.fill(tri_cut_points[:, 0], tri_cut_points[:, 1], color='green')
|
|
|
|
# Calculate the size of the small squares
|
|
small_square_size = min(rect_width, triangle_height) / 2
|
|
|
|
# Cut off the small squares from the rectangle and triangle
|
|
rect_small_squares_points = np.array([[0, 0], [small_square_size, 0], [small_square_size, small_square_size], [0, small_square_size]])
|
|
tri_small_squares_points = np.array([[(base2 + rect_width) / 2 - small_square_size, small_square_size], [(base2 + rect_width) / 2, 0], [(base2 + rect_width) / 2 - small_square_size, 0]])
|
|
|
|
# Plot the small squares
|
|
plt.fill(rect_small_squares_points[:, 0], rect_small_squares_points[:, 1], color='red')
|
|
plt.fill(tri_small_squares_points[:, 0], tri_small_squares_points[:, 1], color='red')
|
|
|
|
# Show the plot
|
|
plt.axis('scaled')
|
|
plt.show()
|