问题描述
在笛卡尔坐标系oxyz中,xoy平面上存在平面p1。将该平面绕y轴逆时针旋转β角度后得到平面p2,平面p2与xoz平面(y=0)的交线记为L。将p2依次绕L顺时针旋转α₁、α₂角度,得到新平面p3、p4。再将p4绕z轴旋转180°得到平面p5。需计算平面p3与p5的交线在xoy平面上的投影与x轴的夹角,并代入β=25°、α₁=10°、α₂=30°进行验证。
推导过程
步骤1:平面p1绕y轴旋转生成p2
- 初始状态:平面p1为xoy平面(z=0),法向量为(0, 0, 1)
- 旋转变换:绕y轴逆时针旋转β后,法向量变为(-sinβ, 0, cosβ),平面方程为:
sin β ⋅ x − cos β ⋅ z = 0 \sin\beta \cdot x - \cos\beta \cdot z = 0 sinβ⋅x−cosβ⋅z=0
步骤2:确定交线L
- 几何特性:平面p2与xoz平面(y=0)相交,联立方程得交线L
- 方向向量:由法向量叉乘计算,方向向量为(cosβ, 0, sinβ)
步骤3:绕L旋转生成p3、p4
- 罗德里格斯旋转:以L为轴顺时针旋转α₁、α₂角度后:
- p3法向量:(-sinβcosα₁, sinα₁, cosβcosα₁)
- p4法向量:(-sinβcosα₂, sinα₂, cosβcosα₂)
步骤4:生成平面p5
- z轴旋转:将p4绕z轴旋转180°,法向量变为:
( sin β cos α 2 , − sin α 2 , cos β cos α 2 ) (\sin\beta\cosα₂, -\sinα₂, \cos\beta\cosα₂) (sinβcosα2,−sinα2,cosβcosα2)
步骤5:计算交线方向向量
- 叉乘运算:p3与p5的法向量叉乘得交线方向向量:
v = ( cos β sin ( α 1 + α 2 ) , 2 sin β cos α 1 cos α 2 , sin β sin ( α 2 − α 1 ) ) \mathbf{v} = \left( \cos\beta\sin(α₁+α₂),\ 2\sin\beta\cosα₁\cosα₂,\ \sin\beta\sin(α₂-α₁) \right) v=(cosβsin(α1+α2), 2sinβcosα1cosα2, sinβsin(α2−α1))
步骤6:投影与夹角计算
- 投影处理:保留x、y分量,投影方向向量为:
v p r o j = ( cos β sin ( α 1 + α 2 ) , 2 sin β cos α 1 cos α 2 ) \mathbf{v}_{proj} = \left( \cos\beta\sin(α₁+α₂),\ 2\sin\beta\cosα₁\cosα₂ \right) vproj=(cosβsin(α1+α2), 2sinβcosα1cosα2) - 正切公式:
tan θ = 2 sin β cos α 1 cos α 2 sin ( α 1 + α 2 ) \tan\theta = \frac{2\sin\beta\cosα₁\cosα₂}{\sin(α₁+α₂)} tanθ=sin(α1+α2)2sinβcosα1cosα2
步骤7:数值计算验证
代入β=25°,α₁=10°,α₂=30°:
tan θ = 2 sin 25 ° cos 10 ° cos 30 ° sin 40 ° ≈ 1.120 ⟹ θ ≈ 48.3 ° \tan\theta = \frac{2\sin25°\cos10°\cos30°}{\sin40°} \approx 1.120 \implies \theta \approx 48.3° tanθ=sin40°2sin25°cos10°cos30°≈1.120⟹θ≈48.3°
python推导
import sympy as sp
from sympy import sin, cos, tan, atan2, pi, Matrix# 定义符号变量
beta, alpha1, alpha2 = sp.symbols('beta alpha1 alpha2')# 步骤1:平面p1绕y轴旋转得到平面p2的法向量
n_p2 = Matrix([-sin(beta), 0, cos(beta)])# 步骤2:平面p2与xoz平面交线L的方向向量
dir_L = Matrix([cos(beta), 0, sin(beta)])# 步骤3:平面p2绕直线L旋转得到平面p3和p4的法向量
# 罗德里格斯旋转公式
def rodrigues(v, k, theta):v_rot = v * cos(theta) + (k.cross(v)) * sin(theta) + k * (k.dot(v)) * (1 - cos(theta))return v_rotk = dir_L / dir_L.norm() # 单位旋转轴
n_p3 = rodrigues(n_p2, k, -alpha1) # 顺时针旋转alpha1
n_p4 = rodrigues(n_p2, k, -alpha2) # 顺时针旋转alpha2# 步骤4:平面p4绕z轴旋转180°得到平面p5的法向量
R_z_180 = Matrix([[cos(pi), -sin(pi), 0],[sin(pi), cos(pi), 0],[0, 0, 1]])
n_p5 = R_z_180 * n_p4# 步骤5:计算平面p3和p5的交线方向向量
dir_intersect = n_p3.cross(n_p5)# 步骤6:投影到xoy平面并计算夹角
dir_project = Matrix([dir_intersect[0], dir_intersect[1], 0])
tan_theta = dir_project[1] / dir_project[0]
theta = atan2(dir_project[1], dir_project[0])# 化简表达式
tan_theta_simplified = sp.simplify(tan_theta)
theta_simplified = sp.simplify(theta)print("tan(theta) =", tan_theta_simplified)
print("theta =", theta_simplified)
输出:
python验证
import sympy as sp
from sympy import sin, cos, atan2, pi, sqrt# 定义符号变量
beta, alpha1, alpha2 = sp.symbols('beta alpha1 alpha2')# 代入具体数值
beta_val = 25 * pi / 180 # 25度转换为弧度
alpha1_val = 10 * pi / 180 # 10度转换为弧度
alpha2_val = 30 * pi / 180 # 30度转换为弧度# 计算tan(theta)
tan_theta = 2 * sqrt(sp.Abs(sin(beta))**2 + sp.Abs(cos(beta))**2) * sin(beta) * cos(alpha1) * cos(alpha2) / sin(alpha1 + alpha2)# 计算theta
theta = atan2(2 * sin(beta) * cos(alpha1) * cos(alpha2) * cos(beta), sin(alpha1 + alpha2) * cos(beta) / sqrt(sp.Abs(sin(beta))**2 + sp.Abs(cos(beta))**2))# 代入数值并计算
tan_theta_val = tan_theta.subs({beta: beta_val, alpha1: alpha1_val, alpha2: alpha2_val})
theta_val = theta.subs({beta: beta_val, alpha1: alpha1_val, alpha2: alpha2_val})# 将theta从弧度转换为角度
theta_deg = sp.deg(theta_val)print("tan(theta) =", tan_theta_val.evalf())
print("theta (弧度) =", theta_val.evalf())
print("theta (角度) =", theta_deg.evalf())
输出:
tan(theta) = 1.12148339835876
theta (弧度) = 0.842599117084027
theta (角度) = 48.277373230364