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() |