Skip to content

刚体的平衡

刚体的平衡公式

{ΣF=0ΣMO=0

二维空间

ΣFx=0ΣFy=0ΣMO=0

三维空间

ΣFx=0ΣFy=0ΣFz=0ΣMx=0ΣMy=0ΣMz=0

支座反力

Support Reactions

  • 支座通过对物体施加力来阻止其平动。

A support prevents the translation of a body by exerting a force on the body.

  • 支座通过对物体施加力偶矩来阻止其转动。

A support prevents the rotation of a body by exerting a couple moment on the body.

支座类型

以下图表是二维空间和三维空间下,常见的支座类型:

Table_5-1_1Table_5-1_2
Table_5-2_1Table_5-2_2

约束

多余约束

Redundant Constraints

不当约束

Improper Constraints

静定

Statically Determinate

静不定

Statically Indeterminate

示例

平面受力分析

Prob_5_33
解题过程

受力分析图:

Prob_5_33 受力分析图
Python
"""
题目:5-33

目标:
    求出刚体系统中拉力 T 和支座反力 A_x、A_y,
    满足系统在力和力矩上的静力平衡。

模型说明:
    - 刚体受以下外力作用:
        - 向下的拉力 L,作用点偏离支座
        - 两个重力 G1(1.20 吨)与 G2(0.60 吨)
        - 未知方向的拉力 T(方向已知,大小未知)
        - 支座反力 A,包含两个分量 A_x、A_y
    - 所有力均在平面内,使用 2D 力平衡 + 1 个力矩平衡方程

方法概述:
    1. 建立所有力和力矩的表达式(用向量形式)
    2. 构造总合力 F_R 和总合力矩 M_R
    3. 使用 sympy 的符号方程建立平衡条件(∑F = 0, ∑M = 0)
    4. 利用 nsolve 数值解方程组,求解未知量
"""

import sympy as sp

# 外力:拉力 L(400 kg)
L = sp.Matrix([0, -400 * 9.8, 0])
r_L = sp.Matrix([16 * sp.cos(sp.rad(45)), 16 * sp.sin(sp.rad(45)), 0]) + \
      sp.Matrix([6 * sp.cos(sp.rad(30)), 6 * sp.sin(sp.rad(30)), 0])

# 重力 G1(1200 kg)
G1 = sp.Matrix([0, -1.20e3 * 9.8, 0])
r_G1 = sp.Matrix([8 * sp.cos(sp.rad(45)), 8 * sp.sin(sp.rad(45)), 0])

# 重力 G2(600 kg)
G2 = sp.Matrix([0, -0.6e3 * 9.8, 0])
r_G2 = sp.Matrix([16 * sp.cos(sp.rad(45)), 16 * sp.sin(sp.rad(45)), 0]) + \
       sp.Matrix([3 * sp.cos(sp.rad(30)), 3 * sp.sin(sp.rad(30)), 0])

# 未知量:拉力大小 T,支座反力 A_x 和 A_y
T_magnitude, A_x, A_y = sp.symbols('T_magnitude A_x A_y', real=True)

F_A = sp.Matrix([A_x, A_y, 0])
r_A = sp.Matrix([0, 0, 0])  # 以支座为原点

# 拉力 T,方向为 -145°
T = sp.Matrix([
    T_magnitude * sp.cos(sp.rad(-145)),
    T_magnitude * sp.sin(sp.rad(-145)),
    0
])
r_T = sp.Matrix([16 * sp.cos(sp.rad(45)), 16 * sp.sin(sp.rad(45)), 0])

# 总合力与总力矩
F_R = F_A + T + L + G1 + G2
M_R = r_A.cross(F_A) + \
      r_T.cross(T) + \
      r_L.cross(L) + \
      r_G1.cross(G1) + \
      r_G2.cross(G2)

# 平衡方程:Fx = 0, Fy = 0, Mz = 0
eqs = [
    sp.Eq(F_R[0], 0),
    sp.Eq(F_R[1], 0),
    sp.Eq(M_R[2], 0)
]

# 解方程组
sol = sp.nsolve(eqs, [T_magnitude, A_x, A_y], [1e3, 1e3, 1e3], dict=True)

# 输出结果(保留 3 位有效数字)
print(f"T:    {sol[0][T_magnitude].evalf(3)} N")
print(f"A_x:  {sol[0][A_x].evalf(3)} N")
print(f"A_y:  {sol[0][A_y].evalf(3)} N")

输出:

T: 7.67E+4 N
A_x: 6.28E+4 N
A_y: 6.55E+4 N