首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【愚公系列】2023年08月 3D数学-点积

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

作者头像
愚公搬代码
发布2025-05-28 17:27:27
发布2025-05-28 17:27:27
15000
代码可运行
举报
文章被收录于专栏:历史专栏历史专栏
运行总次数:0
代码可运行

前言

点积,也叫内积,是向量运算中的一种。对于两个

n

维向量

\vec{a}=(a_1,a_2,\dots,a_n)

\vec{b}=(b_1,b_2,\dots,b_n)

,其点积可以表示为:

\vec{a}\cdot\vec{b}=\sum_{i=1}^na_ib_i=a_1b_1+a_2b_2+\cdots+a_nb_n

点积的本质是将两个向量投影在彼此上的结果相加。点积的值可以告诉我们两个向量的夹角的大小和它们在同一个方向上的程度。如果两个向量的点积为

0

,则它们是正交的(即,它们垂直于彼此)。点积还可以用来计算向量的模长和计算两个向量之间的距离。

一、点积

1.推导过程

假设有两个向量

\vec{a}=(a_1,a_2,a_3)

\vec{b}=(b_1,b_2,b_3)

,它们的点积定义为:

\vec{a}\cdot\vec{b}=a_1b_1+a_2b_2+a_3b_3

点积也可以写成矩阵乘法的形式,即:

\vec{a}\cdot\vec{b}=\begin{pmatrix}a_1&a_2&a_3\end{pmatrix}\begin{pmatrix}b_1\\b_2\\b_3\end{pmatrix}

下面通过矩阵乘法的性质来推导点积的式子。

首先,矩阵乘法的分配律告诉我们:

\begin{pmatrix}a_1&a_2&a_3\end{pmatrix}\begin{pmatrix}b_1\\b_2\\b_3\end{pmatrix}=a_1\begin{pmatrix}b_1\\b_2\\b_3\end{pmatrix}+a_2\begin{pmatrix}b_1\\b_2\\b_3\end{pmatrix}+a_3\begin{pmatrix}b_1\\b_2\\b_3\end{pmatrix}

展开上式,得到:

\begin{pmatrix}a_1b_1\\a_1b_2\\a_1b_3\end{pmatrix}+\begin{pmatrix}a_2b_1\\a_2b_2\\a_2b_3\end{pmatrix}+\begin{pmatrix}a_3b_1\\a_3b_2\\a_3b_3\end{pmatrix}

接着,矩阵乘法的结合律告诉我们:

(a_1b_1+a_2b_2+a_3b_3)=\begin{pmatrix}a_1&a_2&a_3\end{pmatrix}\begin{pmatrix}b_1\\b_2\\b_3\end{pmatrix}

因此,点积的式子

\vec{a}\cdot\vec{b}=a_1b_1+a_2b_2+a_3b_3

得到了证明。

2.应用场景

点积应用场景比较广泛,以下是一些典型的应用场景:

  1. 计算两个向量之间的夹角。由于两个向量的点积公式为:A·B = |A| × |B| × cosθ,可以通过求解余弦值来计算向量的夹角。
  2. 计算向量在某个方向上的投影。对于给定的向量A和单位向量u,向量A在u方向上的投影为:proj_u A = (A·u) u。
  3. 判断两个向量是否垂直。当两个向量A和B垂直时,它们的点积为0;若不为0,则表示它们不垂直。
  4. 计算向量的长度(模)。由于一个向量的长度为:|A| = √(A·A),因此可以通过点积公式来计算向量的长度。
  5. 判断向量的方向。当两个向量A和B夹角小于180度时,它们的点积为正;而当它们夹角大于180度时,点积为负,因此可以通过点积的正负来判断向量的方向。
  6. 在计算机图形学中,点积还常用于计算颜色、光照、阴影等效果。

3.案例

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

  1. 计算工作:

假设有一个力F和一个位移向量d,它们的点积可以用来计算力沿着位移向量的功(即工作)。用以下公式可以计算:W = F · d。

例如,如果一个力是10 N,一个物体向右移动5米,则力沿着物体移动的工作为50焦耳。

  1. 判断两个向量是否垂直:

向量A和向量B垂直,当且仅当它们的点积为零,即A·B=0。例如,如果A = (1, 2, -3)和B = (-2, 1, 2),则它们不是垂直的,因为它们的点积为-4。

  1. 计算投影:

向量A在另一个向量B上的投影可以用点积来计算,如下所示:projB(A) = (A·B / ||B||²) · B,其中projB(A)表示A在B上的投影,||B||表示向量B的长度。

例如,如果A = (2, 4, 6)和B = (1, 0, 0),则A在B上的投影为projB(A) = (2, 0, 0)。

  1. 计算夹角:

两个向量之间的夹角可以用点积来计算,如下所示:cosθ = A·B / (||A|| ||B||),其中θ是夹角,||A||和||B||分别是向量A和向量B的长度。

例如,如果A = (1, 2, 3)和B = (2, -1, 2),则它们之间的夹角为cosθ = (1×2 + 2×(-1) + 3×2) / (√(1² + 2² + 3²) × √(2² + (-1)² + 2²)) = 0.612。

这些案例展示了点积的实际应用。

二、点积函数封装

点积函数是指对两个向量进行内积运算,输出一个标量。可以使用如下的代码实现:

代码语言:javascript
代码运行次数:0
运行
复制
def dot_product(v1, v2):
    """
    计算两个向量的点积
    :param v1: 第一个向量,列表类型
    :param v2: 第二个向量,列表类型
    :return: 两个向量的点积,标量类型
    """
    if len(v1) != len(v2):
        raise ValueError("向量长度不一致")
    return sum([i*j for i,j in zip(v1,v2)])

该函数首先判断两个向量的长度是否一致,如果不一致,会抛出ValueError异常。然后使用zip函数对两个向量进行对应元素的相乘,并使用sum函数对所有元素相加。最终输出点积结果。

使用该函数的示例:

代码语言:javascript
代码运行次数:0
运行
复制
vector1 = [1, 2, 3]
vector2 = [4, 5, 6]
dot_product_res = dot_product(vector1, vector2)
print(dot_product_res) # 输出 32
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、点积
    • 1.推导过程
    • 2.应用场景
    • 3.案例
  • 二、点积函数封装
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档