[python]代码库
import matplotlib.pyplot as plt
import matplotlib.patches as mpathes
from matplotlib.lines import Line2D
marks = [] # 刻度线,每个元素是一个二元组:(刻度线位置, 刻度线高度)
def ruler(l, r, h):
'''
画出直尺上的刻度线
:param l: 直尺左端的刻度值
:param r: 直尺右端的刻度值
:param h: 位于l和r中间刻度线的高度
'''
m = (l + r) // 2
if h > 0:
ruler(l, m, h - 1)
mark(m, h)
ruler(m, r, h - 1)
def mark(m, h):
'''
标记刻度线
:param m: 刻度线位置
:param h: 刻度线高度
'''
marks.append((m, h))
def show():
''' 将直尺图形化 '''
fig, ax = plt.subplots()
rect = mpathes.Rectangle([0, 0], 8, 1, fill=False) # 绘制一个矩形作为直尺
ax.add_patch(rect)
# 绘制刻度线
for m, h in marks:
ax.add_line(Line2D((m, m), (0, h * 0.2), linewidth=1))
plt.axis('equal')
plt.axis('off')
plt.show()
if __name__ == '__main__':
ruler(0, 8, 3) # 直尺长度是8,最高刻度是3
print(marks)
for _, h in marks: # 在控制台展示直尺
print('-' * h)
show()