3. 二维空间中的点与向量:点的表示、向量的加减法、数乘运算

好,咱们今天聊聊二维空间里最基础的两个东西——点和向量。

你可能觉得这太简单了,不就是坐标嘛。但说实话,我在做机器人仿真的时候,很多bug追根溯源,都是因为没把点和向量的关系搞清楚。你想想看,一个位置到底是点还是向量?这决定了你后续所有变换的数学基础。

3.1 点的表示:你在哪?

二维空间里的一个点,说白了就是一个位置。我们用一对坐标 (x, y) 来表示它。

比如,点 P = (3, 4)。这表示从原点出发,沿x轴走3个单位,再沿y轴走4个单位,就到了这个位置。

核心概念: 点是一个位置,它没有大小,没有方向。它只是告诉你「我在哪」。

我在项目中遇到过一个问题:有人把点当作向量来用,直接做加法,结果位置全乱了。嗯,这里要注意——点加向量得到的是另一个点,但点加点是没有意义的。

3.2 向量的表示:你要去哪?

向量跟点不一样。向量表示的是位移或方向。它也有坐标形式,比如 v = (2, 3),但含义完全不同。

向量 v = (2, 3) 的意思是:从某个起点出发,沿x方向移动2,沿y方向移动3。它不关心你从哪开始,只关心你移动了多少。

我的小技巧: 我习惯把点想象成「地图上的一个标记」,把向量想象成「指南针上的一个箭头」。这样区分起来特别清晰。

你可能会问:那点和向量长得一样,怎么区分?

我个人习惯在代码里用不同的变量名来区分。比如点用 point_p,向量用 vector_v。别小看这个习惯,它能帮你避免很多低级错误。

3.3 向量的加减法:合力和分解

向量的加减法,说白了就是位移的合成与分解。

3.3.1 加法

两个向量相加,结果是一个新向量。比如:

v1 = (2, 3)
v2 = (1, 4)
v3 = v1 + v2 = (2+1, 3+4) = (3, 7)

这表示:先按v1的方向走,再按v2的方向走,最终的效果相当于直接按v3的方向走。

我记得有一次做路径规划,需要把多个运动指令合并成一个。当时就是用向量加法,把每一步的位移向量加起来,得到最终的位移向量。简单又高效。

3.3.2 减法

向量减法更有意思。它通常用来计算两点之间的位移。

假设有两个点:A = (1, 2) 和 B = (4, 6)。那么从A到B的向量就是:

v_AB = B - A = (4-1, 6-2) = (3, 4)

这个向量告诉你:从A出发,需要走多少才能到B。

避坑指南: 我曾经在写仿真代码时,把减法的顺序搞反了。结果机器人一直往反方向跑,调试了半天才发现。记住:终点减起点,得到的是从起点指向终点的向量。

3.4 数乘运算:拉长或缩短

数乘,就是用一个标量(一个数)去乘以一个向量。结果是一个新向量,方向不变(如果标量是正数),长度按比例变化。

v = (2, 3)
k = 2
w = k * v = (2*2, 2*3) = (4, 6)

这个 w 的方向和 v 一样,但长度是原来的2倍。

如果 k = -1,那么 w = (-2, -3),方向完全相反。

实际应用: 在机器人仿真中,数乘常用于速度缩放。比如你有一个速度向量,想让它快一点,就乘以一个大于1的数;想让它慢一点,就乘以一个小于1的正数。

3.5 知识体系总览

下面这张图帮你理清本章的核心逻辑:

二维空间:点与向量 点 (Point) 表示位置:P = (x, y) 没有大小,没有方向 点 + 向量 = 新点 向量 (Vector) 表示位移:v = (dx, dy) 有大小,有方向 向量 + 向量 = 新向量 向量的基本运算 加法 v1 + v2 = (x1+x2, y1+y2) 位移的合成 减法 B - A = 从A到B的向量 两点间的位移 数乘 k * v = (k*x, k*y) 缩放向量长度 核心:点定位,向量定向,运算定变化

3.6 代码示例:用Python实现

光说不练假把式。咱们用Python写个简单的向量类,把今天讲的东西跑一遍。

class Vector2D:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __add__(self, other):
        # 向量加法
        return Vector2D(self.x + other.x, self.y + other.y)
    
    def __sub__(self, other):
        # 向量减法
        return Vector2D(self.x - other.x, self.y - other.y)
    
    def __mul__(self, scalar):
        # 数乘
        return Vector2D(self.x * scalar, self.y * scalar)
    
    def __repr__(self):
        return f"({self.x}, {self.y})"

# 测试一下
v1 = Vector2D(2, 3)
v2 = Vector2D(1, 4)

print(f"v1 = {v1}")          # (2, 3)
print(f"v2 = {v2}")          # (1, 4)
print(f"v1 + v2 = {v1 + v2}")  # (3, 7)
print(f"v1 - v2 = {v1 - v2}")  # (1, -1)
print(f"2 * v1 = {v1 * 2}")    # (4, 6)

你看,代码实现起来其实很简单。但背后的几何意义,才是真正重要的东西。

我的建议: 刚开始学的时候,别急着写复杂代码。先在纸上画几个点,手动算一算向量的加减和数乘。把几何直觉建立起来,后面学旋转、平移、坐标变换就轻松多了。

3.7 本章小结

概念 表示 含义 典型运算
点 P = (x, y) 空间中的一个位置 点 + 向量 = 新点
向量 v = (dx, dy) 位移或方向 加法、减法、数乘
向量加法 v1 + v2 位移的合成 对应坐标相加
向量减法 B - A 从A到B的位移 对应坐标相减
数乘 k * v 缩放向量长度 每个坐标乘以k

嗯,今天就到这儿。记住我说的:点定位,向量定向,运算定变化。这九个字,够你用很久。

可可精品资料库