import numpy as np
import matplotlib.pyplot as plt
# 参数
D1 = 5.0 # 入口直径 (cm)
D_throat = 3.85 # 喉部直径 (cm)
De = 5.0 # 出口直径 (cm)
L_converge = 8.0 # 收敛段长度 (cm)
L_diverge = 12.0 # 扩张段长度 (cm)
L_total = 20.0 # 总长度 (cm)
# 生成轮廓曲线(简化直线锥形)
x = np.array([0, L_converge, L_total]) # 轴向位置
y = np.array([D1/2, D_throat/2, De/2]) # 半径
# 绘图
plt.figure(figsize=(10, 4))
plt.plot(x, y, 'b-', linewidth=2, label='喷管轮廓')
plt.plot(x, -y, 'b-', linewidth=2) # 对称部分
plt.fill_between(x, y, -y, color='lightblue', alpha=0.3)
# 标注尺寸
plt.annotate(f'入口 D={D1}cm', xy=(0, D1/2), xytext=(2, D1/2 + 1), arrowprops=dict(arrowstyle="->"))
plt.annotate(f'喉部 D*={D_throat}cm', xy=(L_converge, D_throat/2), xytext=(L_converge+1, D_throat/2 + 0.5), arrowprops=dict(arrowstyle="->"))
plt.annotate(f'出口 D={De}cm', xy=(L_total, De/2), xytext=(L_total-5, De/2 + 1), arrowprops=dict(arrowstyle="->"))
plt.xlabel('轴向长度 (cm)')
plt.ylabel('半径 (cm)')
plt.title('拉瓦尔喷管设计(直径5cm,长20cm)')
plt.grid(True)
plt.axis('equal')
plt.legend()
plt.show()
aW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCiMg5Y+C5pWwCkQxID0gNS4wICAgICMg5YWl5Y+j55u05b6EIChjbSkKRF90aHJvYXQgPSAzLjg1ICAjIOWWiemDqOebtOW+hCAoY20pCkRlID0gNS4wICAgICMg5Ye65Y+j55u05b6EIChjbSkKTF9jb252ZXJnZSA9IDguMCAgIyDmlLbmlZvmrrXplb/luqYgKGNtKQpMX2RpdmVyZ2UgPSAxMi4wICAjIOaJqeW8oOautemVv+W6piAoY20pCkxfdG90YWwgPSAyMC4wICAgICMg5oC76ZW/5bqmIChjbSkKCiMg55Sf5oiQ6L2u5buT5puy57q/77yI566A5YyW55u057q/6ZSl5b2i77yJCnggPSBucC5hcnJheShbMCwgTF9jb252ZXJnZSwgTF90b3RhbF0pICAjIOi9tOWQkeS9jee9rgp5ID0gbnAuYXJyYXkoW0QxLzIsIERfdGhyb2F0LzIsIERlLzJdKSAgIyDljYrlvoQKCiMg57uY5Zu+CnBsdC5maWd1cmUoZmlnc2l6ZT0oMTAsIDQpKQpwbHQucGxvdCh4LCB5LCAnYi0nLCBsaW5ld2lkdGg9MiwgbGFiZWw9J+WWt+euoei9ruW7kycpCnBsdC5wbG90KHgsIC15LCAnYi0nLCBsaW5ld2lkdGg9MikgICMg5a+556ew6YOo5YiGCnBsdC5maWxsX2JldHdlZW4oeCwgeSwgLXksIGNvbG9yPSdsaWdodGJsdWUnLCBhbHBoYT0wLjMpCgojIOagh+azqOWwuuWvuApwbHQuYW5ub3RhdGUoZiflhaXlj6MgRD17RDF9Y20nLCB4eT0oMCwgRDEvMiksIHh5dGV4dD0oMiwgRDEvMiArIDEpLCBhcnJvd3Byb3BzPWRpY3QoYXJyb3dzdHlsZT0iLT4iKSkKcGx0LmFubm90YXRlKGYn5ZaJ6YOoIEQqPXtEX3Rocm9hdH1jbScsIHh5PShMX2NvbnZlcmdlLCBEX3Rocm9hdC8yKSwgeHl0ZXh0PShMX2NvbnZlcmdlKzEsIERfdGhyb2F0LzIgKyAwLjUpLCBhcnJvd3Byb3BzPWRpY3QoYXJyb3dzdHlsZT0iLT4iKSkKcGx0LmFubm90YXRlKGYn5Ye65Y+jIEQ9e0RlfWNtJywgeHk9KExfdG90YWwsIERlLzIpLCB4eXRleHQ9KExfdG90YWwtNSwgRGUvMiArIDEpLCBhcnJvd3Byb3BzPWRpY3QoYXJyb3dzdHlsZT0iLT4iKSkKCnBsdC54bGFiZWwoJ+i9tOWQkemVv+W6piAoY20pJykKcGx0LnlsYWJlbCgn5Y2K5b6EIChjbSknKQpwbHQudGl0bGUoJ+aLieeTpuWwlOWWt+euoeiuvuiuoe+8iOebtOW+hDVjbe+8jOmVvzIwY23vvIknKQpwbHQuZ3JpZChUcnVlKQpwbHQuYXhpcygnZXF1YWwnKQpwbHQubGVnZW5kKCkKcGx0LnNob3coKQ==
aW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCiMg5Y+C5pWwCkQxID0gNS4wICAgICMg5YWl5Y+j55u05b6EIChjbSkKRF90aHJvYXQgPSAzLjg1ICAjIOWWiemDqOebtOW+hCAoY20pCkRlID0gNS4wICAgICMg5Ye65Y+j55u05b6EIChjbSkKTF9jb252ZXJnZSA9IDguMCAgIyDmlLbmlZvmrrXplb/luqYgKGNtKQpMX2RpdmVyZ2UgPSAxMi4wICAjIOaJqeW8oOautemVv+W6piAoY20pCkxfdG90YWwgPSAyMC4wICAgICMg5oC76ZW/5bqmIChjbSkKCiMg55Sf5oiQ6L2u5buT5puy57q/77yI566A5YyW55u057q/6ZSl5b2i77yJCnggPSBucC5hcnJheShbMCwgTF9jb252ZXJnZSwgTF90b3RhbF0pICAjIOi9tOWQkeS9jee9rgp5ID0gbnAuYXJyYXkoW0QxLzIsIERfdGhyb2F0LzIsIERlLzJdKSAgIyDljYrlvoQKCiMg57uY5Zu+CnBsdC5maWd1cmUoZmlnc2l6ZT0oMTAsIDQpKQpwbHQucGxvdCh4LCB5LCAnYi0nLCBsaW5ld2lkdGg9MiwgbGFiZWw9J+WWt+euoei9ruW7kycpCnBsdC5wbG90KHgsIC15LCAnYi0nLCBsaW5ld2lkdGg9MikgICMg5a+556ew6YOo5YiGCnBsdC5maWxsX2JldHdlZW4oeCwgeSwgLXksIGNvbG9yPSdsaWdodGJsdWUnLCBhbHBoYT0wLjMpCgojIOagh+azqOWwuuWvuApwbHQuYW5ub3RhdGUoZiflhaXlj6MgRD17RDF9Y20nLCB4eT0oMCwgRDEvMiksIHh5dGV4dD0oMiwgRDEvMiArIDEpLCBhcnJvd3Byb3BzPWRpY3QoYXJyb3dzdHlsZT0mcXVvdDstJmd0OyZxdW90OykpCnBsdC5hbm5vdGF0ZShmJ+WWiemDqCBEKj17RF90aHJvYXR9Y20nLCB4eT0oTF9jb252ZXJnZSwgRF90aHJvYXQvMiksIHh5dGV4dD0oTF9jb252ZXJnZSsxLCBEX3Rocm9hdC8yICsgMC41KSwgYXJyb3dwcm9wcz1kaWN0KGFycm93c3R5bGU9JnF1b3Q7LSZndDsmcXVvdDspKQpwbHQuYW5ub3RhdGUoZiflh7rlj6MgRD17RGV9Y20nLCB4eT0oTF90b3RhbCwgRGUvMiksIHh5dGV4dD0oTF90b3RhbC01LCBEZS8yICsgMSksIGFycm93cHJvcHM9ZGljdChhcnJvd3N0eWxlPSZxdW90Oy0mZ3Q7JnF1b3Q7KSkKCnBsdC54bGFiZWwoJ+i9tOWQkemVv+W6piAoY20pJykKcGx0LnlsYWJlbCgn5Y2K5b6EIChjbSknKQpwbHQudGl0bGUoJ+aLieeTpuWwlOWWt+euoeiuvuiuoe+8iOebtOW+hDVjbe+8jOmVvzIwY23vvIknKQpwbHQuZ3JpZChUcnVlKQpwbHQuYXhpcygnZXF1YWwnKQpwbHQubGVnZW5kKCkKcGx0LnNob3coKQ==
import numpy as np
import matplotlib.pyplot as plt
# 参数
D1 = 5.0 # 入口直径 (cm)
D_throat = 3.85 # 喉部直径 (cm)
De = 5.0 # 出口直径 (cm)
L_converge = 8.0 # 收敛段长度 (cm)
L_diverge = 12.0 # 扩张段长度 (cm)
L_total = 20.0 # 总长度 (cm)
# 生成轮廓曲线(简化直线锥形)
x = np.array([0, L_converge, L_total]) # 轴向位置
y = np.array([D1/2, D_throat/2, De/2]) # 半径
# 绘图
plt.figure(figsize=(10, 4))
plt.plot(x, y, 'b-', linewidth=2, label='喷管轮廓')
plt.plot(x, -y, 'b-', linewidth=2) # 对称部分
plt.fill_between(x, y, -y, color='lightblue', alpha=0.3)
# 标注尺寸
plt.annotate(f'入口 D={D1}cm', xy=(0, D1/2), xytext=(2, D1/2 + 1), arrowprops=dict(arrowstyle="->"))
plt.annotate(f'喉部 D*={D_throat}cm', xy=(L_converge, D_throat/2), xytext=(L_converge+1, D_throat/2 + 0.5), arrowprops=dict(arrowstyle="->"))
plt.annotate(f'出口 D={De}cm', xy=(L_total, De/2), xytext=(L_total-5, De/2 + 1), arrowprops=dict(arrowstyle="->"))
plt.xlabel('轴向长度 (cm)')
plt.ylabel('半径 (cm)')
plt.title('拉瓦尔喷管设计(直径5cm,长20cm)')
plt.grid(True)
plt.axis('equal')
plt.legend()
plt.show()