平衡条件:平面力系作用下物体平衡的充要条件是主矢与主矩同时为零,即所有力的水平、竖向投影和为零,且对任意一点的力矩和为零。本节用这一条件求解支座反力与桁架内力,并处理带摩擦的平衡区间问题。
上一节画好了自由体图,这一节列方程结案。它在知识体系里是静力学的"运算核心":第 5 章画内力图前要先算支座反力,第 4 章的轴力也来自这里的截面平衡,摩擦判据则直接通往机械设计里的自锁计算。
平面任意力系的平衡方程不止一种形式,任何一种都等价于"主矢为零 + 主矩为零":
| 形式 | 方程 | 限制条件 |
|---|---|---|
| 一矩式 | 两个投影方程 + 一个力矩方程 | 无 |
| 二矩式 | 一个投影 + 对两点各一个力矩 | 两点连线不得垂直于投影轴 |
| 三矩式 | 对三点各一个力矩 | 三点不得共线 |
选哪个形式纯粹是算术方便:矩心取在多个未知力的交点上,那些未知力就不出现在力矩方程里。独立方程数对单个刚体恒为 3;未知力超过 3 就超静定,需要第 5 章之后的变形协调条件补充。
一个完整算例:外伸梁受集中力与均布载荷,求反力并校核。
import numpy as np # 外伸梁:A 处固定铰(x=0),B 处滚动(x=5);AB 段均布 q=8 kN/m, # 外伸端 C(x=7) 有集中力 P=15 kN,向下。 q, P = 8.0, 15.0 xA, xB, xC = 0.0, 5.0, 7.0 # 未知:Ax, Ay, By。平衡:sum Fx=0, sum Fy=0, sum M_A=0 # sum Fx: Ax = 0(无水平载荷) # sum M_A: By*5 - q*5*2.5 - P*7 = 0 By = (q * 5 * 2.5 + P * xC) / (xB - xA) # sum Fy: Ay + By - q*5 - P = 0 Ay = q * 5 + P - By print(f"Ax = 0 kN, Ay = {Ay:.2f} kN, By = {By:.2f} kN") # 用矩阵形式再解一遍,体会标准流程 A = np.array([ [1.0, 0.0, 0.0], # sum Fx [0.0, 1.0, 1.0], # sum Fy [0.0, 0.0, xB - xA], # sum M_A(Ay、Ax 过矩心无力臂) ]) b = np.array([0.0, q * 5 + P, q * 5 * 2.5 + P * xC]) sol = np.linalg.solve(A, b) print(f"矩阵解:Ax={sol[0]:.2f}, Ay={sol[1]:.2f}, By={sol[2]:.2f}") # 校核:对 C 取矩应等于零 check = Ay * xC - By * (xC - xB) - q * 5 * (xC - 2.5) print(f"对 C 点力矩校核 = {check:.4f} kN·m(应接近 0)")
运行得到 Ay = -1 kN、By = 56 kN:A 处反力为负,说明实际方向向下——外伸段把 A 端"撬"起来了。负号不是错误,是方向信息,这类解读能力比会解方程更重要。
桁架由二力杆铰接而成,载荷只作用于节点,杆件只受轴向拉压。载荷路径清清楚楚:外力进节点,沿杆件轴向分段传递,最后汇入支座。求内力两条路:
import numpy as np # 简单桁架:5 个节点,7 根杆。跨度 2L,高 h,节点载荷 P 在顶点 L, h, P = 2.0, 1.5, 20.0 # 单位 m, kN # 节点坐标: A(0,0) B(2,0) C(4,0) D(1,h) E(3,h),载荷 P 作用于 D # 支座:A 固定铰,C 滚动(竖向) Ay = By = P / 2 # 对称,竖向反力各半 # 节点法从 A 开始:杆 AD 与 AB 的内力(设拉为正) # A: 水平 F_AB + F_AD*cos(a) = 0;竖向 Ay + F_AD*sin(a) = 0 ang = np.arctan2(h, L) F_AD = -Ay / np.sin(ang) F_AB = -F_AD * np.cos(ang) print(f"杆 AD 内力 {F_AD:.2f} kN(负=压),杆 AB 内力 {F_AB:.2f} kN(正=拉)") # 节点 D:对称性,DE 水平杆内力为 0(无载对称杆) print("节点 D 对称无水平外载,水平杆 DE 内力为 0 kN——零杆") # 截面法复核:切 AB、AD、DE,取左侧,对 D 取矩可解 F_AB # sum M_D = F_AB * h - Ay * L = 0 F_AB2 = Ay * L / h print(f"截面法复核 F_AB = {F_AB2:.2f} kN,与节点法一致")
注意那个零杆:对称位置无载荷的水平杆内力为零。零杆不是废杆,它服务的是其他工况与稳定长细比(第 5 章压杆稳定会回来解释为什么受压杆尤其怕细长)。
摩擦问题的特别之处在于静摩擦力是个区间,不是定值。库仑摩擦定律给出上限:最大静摩擦等于法向反力乘摩擦系数。平衡成立的条件是所需摩擦力不超过这个上限;主动力落在摩擦角以内时,无论多大都滑不动,这叫自锁。
完整案例:斜面上一个重块,判断它在哪个倾角开始滑动。
import numpy as np # 重块 W=500 N 放在斜面上,静摩擦系数 mu=0.35,倾角 theta 从 10 到 30 度扫描 W, mu = 500.0, 0.35 print(f"{'倾角':>6} {'需要摩擦力':>10} {'最大静摩擦':>10} {'状态':>6}") for deg in range(10, 31, 5): th = np.radians(deg) # 沿斜面平衡:f = W*sin(theta);法向 N = W*cos(theta) f_need = W * np.sin(th) f_max = mu * W * np.cos(th) state = "静止" if f_need <= f_max else "滑动" print(f"{deg:5d}° {f_need:10.1f} {f_max:10.1f} {state:>6}") # 自锁条件:tan(theta) <= mu print(f"\n自锁临界角 = {np.degrees(np.arctan(mu)):.2f}°(摩擦角)")
扫描结果在 10° 到 15° 静止、20° 起滑动,临界角 19.29° 即摩擦角。螺纹自锁(千斤顶不下滑)用的就是同一条判据:螺纹升角小于摩擦角。
💡 关键直觉:无摩擦的平衡方程给出唯一解,含摩擦的平衡给出一个可行区间。题目问"摩擦力是多少"时若没给运动趋势,答案是一段范围,硬给单值反而暴露概念不清。
静力学到此闭环。下一章放开"静止"假设,先不管力,纯看物体怎么动。