【愚公系列】2023年08月 3D数学-叉积


前言

叉积,也称向量积或叉乘,是两个三维向量之间的一种运算,表示为 a ⃗ × b ⃗ \vec{a} \times \vec{b} a ×b ,结果是另一个向量,垂直于 a ⃗ \vec{a} a b ⃗ \vec{b} b 所在的平面,方向由右手定则确定。叉积的计算公式为:

a ⃗ × b ⃗ = [ a 1 a 2 a 3 ] × [ b 1 b 2 b 3 ] = [ a 2 b 3 − a 3 b 2 a 3 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 ] \vec{a} \times \vec{b} = \begin{bmatrix} a_1 \\ a_2 \\ a_3 \end{bmatrix} \times \begin{bmatrix} b_1 \\ b_2 \\ b_3 \end{bmatrix} = \begin{bmatrix} a_2 b_3 - a_3 b_2 \\ a_3 b_1 - a_1 b_3 \\ a_1 b_2 - a_2 b_1 \end{bmatrix} a ×b = a1a2a3 × b1b2b3 = a2b3a3b2a3b1a1b3a1b2a2b1

其中, a 1 , a 2 , a 3 a_1,a_2,a_3 a1,a2,a3 b 1 , b 2 , b 3 b_1,b_2,b_3 b1,b2,b3 分别是 a ⃗ \vec{a} a b ⃗ \vec{b} b 的三个分量。叉积的模长等于两个向量构成的平行四边形的面积,即 ∣ a ⃗ × b ⃗ ∣ = ∣ a ⃗ ∣ ∣ b ⃗ ∣ sin ⁡ θ |\vec{a} \times \vec{b}| = |\vec{a}||\vec{b}|\sin\theta a ×b =a ∣∣b sinθ,其中 θ \theta θ a ⃗ \vec{a} a b ⃗ \vec{b} b 之间的夹角。

一、叉积

1.推导过程

叉积是向量运算中的一种,也称为向量积或叉乘,它的结果是一个向量。它的计算公式如下:

c ⃗ = a ⃗ × b ⃗ = ∣ a ⃗ ∣ ∣ b ⃗ ∣ sin ⁡ θ n ^ \vec{c} = \vec{a} \times \vec{b} = |\vec{a}||\vec{b}|\sin\theta\hat{n} c =a ×b =a ∣∣b sinθn^

其中, θ \theta θ a ⃗ \vec{a} a b ⃗ \vec{b} b 之间的夹角, n ^ \hat{n} n^是一个法向量,其大小为1且与 a ⃗ \vec{a} a b ⃗ \vec{b} b 确定的平面垂直。

叉积的推导过程如下:

  1. 首先,我们需要明确叉积的定义和性质:

定义: a ⃗ × b ⃗ \vec{a} \times \vec{b} a ×b 是一个向量,其大小为 ∣ a ⃗ ∣ ∣ b ⃗ ∣ sin ⁡ θ |\vec{a}||\vec{b}|\sin\theta a ∣∣b sinθ,方向垂直于 a ⃗ \vec{a} a b ⃗ \vec{b} b 所确定的平面,并按右手定则指向该平面内部。

性质:叉积满足分配律、反交换律和结合律。叉积还满足线性运算,即 a ⃗ × ( k b ⃗ ) = k ( a ⃗ × b ⃗ ) \vec{a} \times (k\vec{b}) = k(\vec{a} \times \vec{b}) a ×(kb )=k(a ×b )

  1. 我们可以通过向量的坐标来推导叉积的计算公式。

a ⃗ = ( a 1 , a 2 , a 3 ) \vec{a} = (a_{1}, a_{2}, a_{3}) a =(a1,a2,a3) b ⃗ = ( b 1 , b 2 , b 3 ) \vec{b} = (b_{1}, b_{2}, b_{3}) b =(b1,b2,b3),则向量 a ⃗ × b ⃗ \vec{a} \times \vec{b} a ×b 的坐标可以表示为:

$\vec{a} \times \vec{b} = \begin{vmatrix} \hat{i} & \hat{j} & \hat{k} \ a_{1} & a_{2} & a_{3} \ b_{1} & b_{2} & b_{3} \end{vmatrix} $

其中, i ^ \hat{i} i^ j ^ \hat{j} j^ k ^ \hat{k} k^分别表示 x x x y y y z z z轴的单位向量。 ∣ i ^ j ^ k ^ a 1 a 2 a 3 b 1 b 2 b 3 ∣ \begin{vmatrix} \hat{i} & \hat{j} & \hat{k} \\ a_{1} & a_{2} & a_{3} \\ b_{1} & b_{2} & b_{3} \end{vmatrix} i^a1b1j^a2b2k^a3b3 表示一个行列式,我们可以通过展开这个行列式来得到叉积的计算公式。

  1. 展开行列式,得到:

∣ i ^ j ^ k ^ a 1 a 2 a 3 b 1 b 2 b 3 ∣ = ( j ^ a 3 b 1 − j ^ a 2 b 3 ) + ( − i ^ a 3 b 1 + i ^ a 1 b 3 ) + ( k ^ a 2 b 1 − k ^ a 1 b 2 ) \begin{vmatrix} \hat{i} & \hat{j} & \hat{k} \\ a_{1} & a_{2} & a_{3} \\ b_{1} & b_{2} & b_{3} \end{vmatrix} = (\hat{j}a_{3}b_{1} - \hat{j}a_{2}b_{3}) + (-\hat{i}a_{3}b_{1} + \hat{i}a_{1}b_{3}) + (\hat{k}a_{2}b_{1} - \hat{k}a_{1}b_{2}) i^a1b1j^a2b2k^a3b3 =(j^a3b1j^a2b3)+(i^a3b1+i^a1b3)+(k^a2b1k^a1b2)

  1. 化简上式,得到:

a ⃗ × b ⃗ = ( a 2 b 3 − a 3 b 2 ) i ^ + ( a 3 b 1 − a 1 b 3 ) j ^ + ( a 1 b 2 − a 2 b 1 ) k ^ \vec{a} \times \vec{b} = (a_{2}b_{3} - a_{3}b_{2})\hat{i} + (a_{3}b_{1} - a_{1}b_{3})\hat{j} + (a_{1}b_{2} - a_{2}b_{1})\hat{k} a ×b =(a2b3a3b2)i^+(a3b1a1b3)j^+(a1b2a2b1)k^

这就是叉积的计算公式。

综上所述,叉积的推导过程是通过向量的坐标来展开行列式,然后化简得到叉积的计算公式。

2.应用场景

叉积在物理学、工程学、数学、计算机科学等领域都有广泛的应用,以下是一些常见的应用场景:

  1. 物理学中的力矩:叉积可用来计算物体所受力矩的大小和方向。

  2. 电磁学中的磁场:叉积可用于计算磁场强度和磁场线的方向。

  3. 三维图形学中的向量旋转:叉积可用于计算向量绕轴旋转后的新向量。

  4. 机器人学中的机械臂运动:叉积可用于描述机械臂的运动和姿态。

  5. 计算机图形学中的光线追踪:叉积可用于计算光线与物体表面的交点及反射光线的方向。

  6. 工程学中的力学分析:叉积可用于计算扭矩、剪力和弯曲力等。

  7. 导航学中的航向角度计算:叉积可用于计算航向角度,用于导航和飞行控制中。

3.案例

以下是几个叉积相关的案例:

  1. 计算力矩:假设一根长度为2m的棍子,重量为10N,放置在平衡位置上。现在在棍子的一个端点施加一个力为20N的力,垂直于棍子,求这个力对于棍子的力矩。根据力矩公式,力矩等于施力点到旋转中心的距离乘以力的大小,因此可以使用叉积来计算。将棍子的长度向量记为a,施力点到旋转中心的向量记为b,力的向量记为F,则力矩M等于a×F·b。将向量化为数字,可以计算出力矩为40N·m。

  2. 计算平面的法向量:假设一个平面由三个点组成,分别是(1,2,3)、(4,5,6)和(7,8,9)。首先需要计算两个向量,分别是从第一个点到第二个点的向量和从第一个点到第三个点的向量。这两个向量的叉积就是平面的法向量。使用向量叉积公式,可以计算出 (4-1, 5-2, 6-3) × (7-1, 8-2, 9-3) = (3,3,3),因此该平面的法向量为(3,3,3)。

  3. 计算旋转后的向量:假设有一个向量v(1,0,0),需要将其绕z轴旋转45度。可以使用叉积来计算旋转后的向量。将z轴的单位向量记为k,向量v在xy平面上的投影记为v’,则旋转后的向量可以表示为 v’·cos(45) + (k×v’)·sin(45)。计算v’可以将向量v的z分量设为0,因此v’为 (cos(45), sin(45), 0)。将其代入公式计算,可以得到旋转后的向量为 (cos(45), sin(45), 0)×(1,0,0)·sin(45) + (cos(45), sin(45), 0)·(1,0,0)·cos(45) = (sqrt(2)/2, sqrt(2)/2, 0)。

二、叉积函数封装

以下是叉积函数的封装代码:

def cross_product(vector1, vector2):
    """
    计算两个三维向量的叉积
    :param vector1: 三维向量,格式为[x1, y1, z1]
    :param vector2: 三维向量,格式为[x2, y2, z2]
    :return: 返回叉积结果,格式为[x, y, z]
    """
    x = vector1[1] * vector2[2] - vector1[2] * vector2[1]
    y = vector1[2] * vector2[0] - vector1[0] * vector2[2]
    z = vector1[0] * vector2[1] - vector1[1] * vector2[0]
    return [x, y, z]

叉积函数的使用方法如下:

vector1 = [1, 2, 3]
vector2 = [4, 5, 6]
cross_product_result = cross_product(vector1, vector2)
print(cross_product_result)  # 输出结果为:[-3, 6, -3]

猜你喜欢

转载自blog.csdn.net/aa2528877987/article/details/132438804