Python起重机主梁截面特性计算小程序

python写了一个起重机主梁的计算小程序,欢迎批评

import turtle
# 要求输入主梁各个截面
#尚未考虑有方刚轨道的情况
# width1 = 400
# height1 =8
# width2 = 400
# height2 =20
# width3 = 6
# height3 =600
# width4 = 6
# height4 =600
# left_side =30
# right_side =30
# 以下为命令行输入
width1 = int(input('上盖板宽度B1(mm):'))
height1 =int(input('上盖板厚度t1(mm):'))
width2 = int(input('下盖板宽度B2(mm):'))
height2 =int(input('下盖板厚度t2(mm):'))
width3 = int(input('左腹板厚度t3(mm):'))
height3 =int(input('左腹板高度H3(mm):'))
width4 = int(input('右腹板厚度t4(mm):'))
height4 =int(input('右腹板高度H4(mm):'))
left_side =int(input('左侧腹板边距a(mm):'))
right_side =int(input('右侧腹板边距a(mm):'))
# 输入完成后形成表格输出
table_width=50#设置输出表格的宽度
item_width=20
value_width=table_width-item_width
txt_fmt='{{:<{}}}{{:>{}.2f}}'.format(item_width,value_width)
print('='*table_width)
print('{txt:^{num}}'.format(num=table_width,txt='主梁截面参数'))
print('-'*table_width)
print(txt_fmt.format('上盖板宽度B1(mm)',width1))
print(txt_fmt.format('上盖板厚度t1(mm)',height1))
print(txt_fmt.format('下盖板宽度B2(mm)',width2))
print(txt_fmt.format('下盖板厚度t2(mm)',height2))
print(txt_fmt.format('左腹板厚度t3(mm)',width3))
print(txt_fmt.format('左腹板高度H3(mm)',height3))
print(txt_fmt.format('右腹板厚度t4(mm)',height4))
print(txt_fmt.format('右腹板高度H4(mm)',width1))
print(txt_fmt.format('左侧腹板边距a(mm)',left_side))
print(txt_fmt.format('右侧腹板边距a(mm)',right_side))
print('='*table_width)
def rec_area(width, height):
    '计算矩形的面积和惯性矩'
    area = float(width) * float(height)
    inertiay = float(height) * (float(width)) ** 3 / 12 #矩形自身x轴惯性矩
    inertiax = float(width) * (float(height)) ** 3 / 12 #矩形自身y轴惯性矩
    return area, inertiax, inertiay # 返回截面面积,x轴惯性矩,y轴惯性矩
# 以下为计算形心x坐标
# 逐个调用面积计算函数计算出每个面积
area1 = rec_area(width1, height1)
area2 = rec_area(width2, height2)
area3 = rec_area(width3, height3)
area4 = rec_area(width4, height4)
area = area1[0] + area2[0] + area3[0] + area4[0]  # 截面总面积
weight1=(area*1000*7850)*10**(-9)
#此计算的前提是上下盖板宽度一致,否则形心x会出现错误或保证上下板左侧对齐
centroid_x = float((
                            area1[0] * (width1 / 2)+\
                            area2[0] * (width2 / 2)+\
                            area3[0] * (left_side + width3 / 2)+\
                            area4[0] * (width2 - right_side - width4 / 2)
                    ) / area
                   )
# 以下为计算形心y坐标
centroid_y = float((
                            area1[0] * (height1 / 2 + height3+height2)+\
                            area2[0] * (height2 / 2)+\
                            area3[0] * (height2 + height3 / 2)+\
                            area4[0] * (height2 + height4 / 2)\
                       ) / area
                    )
#以下为计算截面惯性矩
inertia_x=float(area1[1]+area1[0]*(height2+height3+height1/2-centroid_y)**2+\
                area2[1]+area2[0]*(centroid_y-height2/2)**2+\
                area3[1]+area3[0]*(height2+height3/2-centroid_y)**2+\
                area4[1]+area4[0]*(height2+height4/2-centroid_y)**2
               )
inertia_y=float(area1[2]+area1[0]*(width1/2-centroid_x)**2+\
                area2[2]+area2[0]*(centroid_x-width2/2)**2+\
                area3[2]+area3[0]*(centroid_x-left_side-width3/2)**2+\
                area4[2]+area4[0]*(width2-right_side-width4/2-centroid_x)**2
)
#以下为画主梁截面图
turtle.setup(width=0.95,height=0.95)
turtle.shape('turtle')#画图箭头变小乌龟
turtle.speed(2)
turtle.penup()
turtle.left(180)
turtle.forward(width2/2)
turtle.left(90)
turtle.forward(height3/2)
turtle.left(90)
turtle.pendown()#到此处实现原点中心基本放在图形中心位置
turtle.forward(width2)
turtle.left(90)
turtle.forward(height2)
turtle.left(90)
turtle.forward(width2)
turtle.left(90)
turtle.forward(height2)#画完下盖板
turtle.penup()
turtle.left(180)
turtle.forward(height2)
turtle.right(90)
turtle.forward(left_side)
turtle.pendown()#回到腹板画笔起始处
turtle.left(90)
turtle.forward(height3)
turtle.right(90)
turtle.forward(width3)
turtle.right(90)
turtle.forward(height3)#画完左腹板下面横条没有再画
turtle.penup()
turtle.left(90)
turtle.forward(width2-left_side-width3-right_side)
turtle.left(90)
turtle.pendown()#画笔准备画右腹板
turtle.forward(height4)
turtle.left(90)
turtle.forward(width4)
turtle.left(90)
turtle.forward(height4)
turtle.penup()#画完右腹板
turtle.right(90)
turtle.forward(width2-right_side-width4)
turtle.right(90)
turtle.forward(height3)
turtle.pendown()#准备画上腹板
turtle.right(90)
turtle.forward(width1)
turtle.left(90)
turtle.forward(height1)
turtle.left(90)
turtle.forward(width1)
turtle.left(90)
turtle.forward(height1)
turtle.penup()
turtle.forward(height3+height2)
turtle.left(90)
turtle.pendown()#左下角画一个坐标原点
turtle.pencolor('red')
turtle.circle(2)
turtle.pencolor('black')#原点画完切换回黑色
turtle.penup()#开始找写字地方
turtle.goto((width1/2+50),0)#文字标注:开始位置离上盖板右侧50像素地方开始写
turtle.pendown()
turtle.pencolor('green')
turtle.write('主梁截面参数:\n\
上盖板厚度B1(mm):{}\n\
上盖板厚度t1(mm):{}\n\
下盖板宽度B2(mm){}\n\
下盖板厚度t2(mm){}\n\
左腹板厚度t3(mm){}\n\
左腹板高度H3(mm){}\n\
右腹板厚度t4(mm){}\n\
右腹板高度H4(mm){}\n\
左侧腹板边距a(mm):{}\n\
右侧腹板边距a(mm):{}\n\
'.format(width1,height1,width2,height2,width3,height3,width4,height4,left_side,right_side),font=(15))
turtle.penup()#以下不知道为何会与上面文字重合,故从这个地方将乌龟下移150像素
turtle.right(90)
turtle.forward(150)
turtle.pendown()
turtle.pencolor('black')
turtle.write('计算结果:\n\
截面面积A(mm²):{:.3f}\n\
每米质量W(kg)):{:.3f}\n\
形心坐标X(mm):{:.3f}\n\
形心坐标Y(mm):{:.3f}\n\
截面惯性矩Ix(mm^4):{:.3f}\n\
截面惯性矩Iy(mm^4):{:.3f}\n\
'.format(area,weight1,centroid_x,centroid_y,inertia_x,inertia_y),font=(15))
turtle.done()





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值