fig-laba6-gruppy.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. # -*- coding: utf-8 -*-
  2. """
  3. Лаба 6, рисунок «Группы шпуров в забое»:
  4. сверху — забой с группами шпуров (I врубовые, II отбойные, III контурные,
  5. IV подошвенные), снизу — разрез: глубины врубовых l_в и отбойных l_о шпуров,
  6. величина заходки l_зах, отступ контурных шпуров от края 10-15 см, ширина B.
  7. Перерисовано векторно вместо скана методички (в скане метка III отсутствовала).
  8. """
  9. import numpy as np
  10. import matplotlib
  11. matplotlib.use('Agg')
  12. import matplotlib.pyplot as plt
  13. import matplotlib.font_manager as fm
  14. fm.fontManager.addfont('C:/Windows/Fonts/GOST2304A.ttf')
  15. matplotlib.rcParams['font.family'] = 'GOST 2.304 type A'
  16. matplotlib.rcParams['mathtext.default'] = 'regular'
  17. matplotlib.rcParams['mathtext.fontset'] = 'custom'
  18. matplotlib.rcParams['mathtext.rm'] = 'GOST 2.304 type A'
  19. matplotlib.rcParams['mathtext.it'] = 'GOST 2.304 type A'
  20. matplotlib.rcParams['mathtext.bf'] = 'GOST 2.304 type A'
  21. fig = plt.figure(figsize=(7.6 / 2.54, 8.0 / 2.54), dpi=300)
  22. ax = fig.add_axes([0, 0, 1, 1])
  23. ax.set_aspect('equal'); ax.axis('off')
  24. ax.set_xlim(-0.4, 8.4); ax.set_ylim(-4.95, 4.4)
  25. BLACK = '#111111'
  26. # --- верх: забой (подковообразное сечение) с группами шпуров -------------------
  27. R, HW, YC = 2.6, 1.5, 1.5 # свод, стена, уровень пят
  28. th = np.linspace(0, np.pi, 200)
  29. ax.plot(R * np.cos(th) + 3.0, YC + R * np.sin(th), color=BLACK, lw=1.6)
  30. ax.plot([0.4, 0.4], [0, YC], color=BLACK, lw=1.6)
  31. ax.plot([5.6, 5.6], [0, YC], color=BLACK, lw=1.6)
  32. ax.plot([0.4, 5.6], [0, 0], color=BLACK, lw=1.6)
  33. g_cut, g_aux, g_cont, g_toe = '#cc1f2d', '#1f5fb4', '#111111', '#1d8a4b'
  34. holes = []
  35. # врубовые — замкнутое кольцо в центре
  36. for t in np.radians(np.arange(8) * 45 + 22.5):
  37. holes.append((3.0 + 0.42 * np.cos(t), 2.15 + 0.30 * np.sin(t), g_cut))
  38. # отбойные — кольцо вокруг вруба
  39. for t in np.radians(np.arange(12) * 30 + 15):
  40. rr = 0.42 + (0.72 if abs(np.cos(t)) > 0.5 else 0.55)
  41. holes.append((3.0 + rr * np.cos(t) * 1.15, 2.05 + rr * np.sin(t) * 1.25, g_aux))
  42. # контурные — по периметру с отступом
  43. off = 0.33
  44. rc = R - off
  45. for t in np.linspace(np.radians(12), np.pi - np.radians(12), 11):
  46. holes.append((3.0 + rc * np.cos(t), YC + rc * np.sin(t), g_cont))
  47. for y in np.linspace(YC - 0.05, off + 0.25, 3):
  48. holes.append((0.4 + off, y, g_cont))
  49. holes.append((5.6 - off, y, g_cont))
  50. # подошвенные — ряд вдоль подошвы
  51. for x in np.linspace(1.1, 4.9, 7):
  52. holes.append((x, 0.38, g_toe))
  53. for x, y, c in holes:
  54. ax.plot(x, y, 'o', ms=3.4, mfc='white' if c == g_cont else c, mec=c, mew=0.9, zorder=5)
  55. # выноски групп
  56. def leader(xy, xytext, txt, ha='center'):
  57. ax.annotate(txt, xy=xy, xytext=xytext, fontsize=10, ha=ha, va='center',
  58. color=BLACK, arrowprops=dict(arrowstyle='-', color=BLACK, lw=0.8,
  59. shrinkA=2, shrinkB=1))
  60. leader((3.0, 2.15), (1.15, 4.05), 'I') # врубовые
  61. leader((3.0 + 0.96, 2.62), (5.05, 4.05), 'II') # отбойные
  62. leader((5.27, YC + rc * np.sin(np.radians(50))), (6.85, 2.2), 'III') # контурные
  63. leader((4.9, 0.38), (1.55, -0.85), 'IV', ha='center') # подошвенные
  64. # --- низ: разрез-план заходки: забой снизу, шпуры уходят в массив ---------------
  65. y0 = -4.1 # плоскость забоя
  66. y_c, y_a, y_w = y0 + 2.0, y0 + 1.75, y0 + 2.55 # контурные, отбойные, врубовые
  67. x_l, x_r = 2.7, 6.5 # границы по ширине B
  68. ax.plot([x_l - 0.35, x_r + 0.35], [y0, y0], color=BLACK, lw=1.8) # забой (толстая)
  69. ax.plot([x_l - 0.1, x_r + 0.1], [y_c + 0.25, y_c + 0.25], color='0.4',
  70. lw=0.6, ls=(0, (4, 3))) # контур выработки над заходкой
  71. for x, dx in ((3.0, -0.3), (3.3, -0.18), (5.9, 0.18), (6.2, 0.3)): # контурные
  72. ax.plot([x, x + dx], [y0, y_c], color=g_cont, lw=0.8)
  73. for x in (3.75, 4.2, 5.0, 5.45): # отбойные
  74. ax.plot([x, x], [y0, y_a], color=g_aux, lw=0.8)
  75. for x in (4.6, 4.72, 4.84, 4.96): # врубовые: следы пар в клине
  76. ax.plot([x, x], [y0, y_w], color=g_cut, lw=0.8)
  77. for x in (2.95, 6.35): # подошвенные (вдоль подошвы забоя)
  78. ax.plot([x, x], [y0, y0 + 0.45], color=g_toe, lw=0.8)
  79. TICK, EXT = 0.07, 0.09
  80. def tick(x, y):
  81. ax.plot([x - TICK, x + TICK], [y - TICK, y + TICK], color=BLACK, lw=1.1,
  82. solid_capstyle='butt')
  83. def vdim(x, y_from, y_to, txt, side='left'):
  84. dx = -0.16 if side == 'left' else 0.16
  85. for yy in (y_from, y_to):
  86. ax.plot([x, x - dx * 0.5], [yy, yy], color=BLACK, lw=0.5, zorder=1)
  87. ax.plot([x, x], [y_from, y_to], color=BLACK, lw=0.7)
  88. tick(x, y_from); tick(x, y_to)
  89. ax.text(x + dx, (y_from + y_to) / 2, txt, fontsize=7.5, rotation=90,
  90. ha='center', va='center')
  91. vdim(5.6, y0, y_w, 'l$_в$', side='right') # глубина врубовых
  92. vdim(3.5, y0, y_a, 'l$_о$', side='left') # глубина отбойных
  93. vdim(6.7, y0, y_c, 'l$_зах$', side='right') # величина заходки
  94. ax.annotate('10-15 см', xy=(6.5, y_c + 0.25), xytext=(4.55, y_c + 0.85),
  95. fontsize=7, color=BLACK, va='center',
  96. arrowprops=dict(arrowstyle='->', color=BLACK, lw=0.6, shrinkA=1, shrinkB=2))
  97. # B — ширина выработки (под разрезом)
  98. yb = y0 - 0.5
  99. for xe in (x_l, x_r):
  100. ax.plot([xe, xe], [y0 - 0.12, yb - EXT], color=BLACK, lw=0.5, zorder=1)
  101. ax.plot([x_l, x_r], [yb, yb], color=BLACK, lw=0.7)
  102. tick(x_l, yb); tick(x_r, yb)
  103. ax.text((x_l + x_r) / 2, yb - 0.14, 'B', fontsize=9, ha='center', va='top', style='italic')
  104. fig.savefig('assets/images/laba6-gruppy-shpurov.png', dpi=300, facecolor='white')
  105. print('сохранено: assets/images/laba6-gruppy-shpurov.png')