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),方向完全相反。
3.5 知识体系总览
下面这张图帮你理清本章的核心逻辑:
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 |
嗯,今天就到这儿。记住我说的:点定位,向量定向,运算定变化。这九个字,够你用很久。