第 1 章 从数轴到坐标平面
学习目标
- 理解负数与数轴,会在数轴上表示数
- 理解绝对值的含义并会计算
- 理解直角坐标系(坐标平面),会读坐标、标点
- 由勾股定理推导两点间距离公式,会计算距离
- 会用 NumPy 表示坐标点,用 matplotlib 画出坐标平面
1.1 负数与数轴
小学里你学过的数,是从 开始往大的方向走的:。它们叫自然数。可是生活里有一类量,天然就「比 0 还小」。
比如冬天,天气预报说「明天最低气温零下 5 摄氏度」。温度计上的刻度,以 0 为分界:0 以上是正温度,0 以下是负温度。零下 5 度,写作 。这个「」不是减号,而是负号,表示「比 0 小 5 个刻度」。
负数还有别的例子:欠别人 10 块钱,记作 元;电梯地下 3 层,记作 层;海拔 500 米以下是海平面以下 500 米,记作 米。
把「大小」和「方向」画在一条直线上,就得到数轴:
数轴是一条直线,上面规定了三个要素:
- 原点:记作 ,是正负的分界;
- 正方向:通常取向右,箭头表示;
- 单位长度:1 格代表多少,由你规定。
数轴上每一个点都对应一个数,反过来,每一个数都能在数轴上找到唯一一个点。数轴右边比左边大:,因为 在 的右边。

负数、正数与 0 合在一起,叫有理数与无理数的并集——不过现在你只需要记住:数轴上任意一个点都对应一个实数,实数就是「数轴上所有点的名字」。
用 matplotlib 把数轴画出来:
import matplotlib.pyplot as plt
from matplotlib import font_manager
for f in font_manager.findSystemFonts():
if any(k in f for k in ("NotoSansCJK", "NotoSansSC", "wqy", "SimHei", "msyh", "PingFang")):
font_manager.fontManager.addfont(f)
plt.rcParams["font.sans-serif"] = ["Noto Sans CJK SC", "WenQuanYi Zen Hei", "SimHei", "Microsoft YaHei", "PingFang SC"]
plt.rcParams["axes.unicode_minus"] = False
import numpy as np
fig, ax = plt.subplots(figsize=(8, 2))
nums = [-4, -2.5, 0, 1.5, 4]
colors = ["tab:red", "tab:orange", "tab:green", "tab:blue", "tab:purple"]
ax.axhline(0, color="black", linewidth=1.5)
ax.arrow(5.5, 0, 0.4, 0, head_width=0.12, head_length=0.12, color="black") # 正方向箭头
for n, c in zip(nums, colors):
ax.scatter([n], [0], color=c, zorder=3)
ax.annotate(str(n), (n, 0), textcoords="offset points", xytext=(0, 8), ha="center", color=c)
ax.annotate("原点 0", (0, 0), textcoords="offset points", xytext=(0, -18), ha="center", color="tab:green")
ax.set_xticks([])
ax.set_yticks([])
ax.set_xlim(-5.5, 6.5)
ax.set_ylim(-0.6, 0.8)
ax.set_title("数轴:原点、正方向、单位长度")
fig.savefig("book/public/figs/fig01-number_line.png", dpi=120, bbox_inches="tight")
plt.close(fig)1.2 绝对值:到原点的距离
小学里学「距离」,只知道它一定是正数或 0——距离没有负的。把「距离」翻译到数轴上,就有了绝对值。
绝对值:数 的绝对值,记作 ,表示数轴上 到原点 的距离。
因为距离不可能是负的,所以:
也就是:非负数不变,负数去掉负号。
几个例子:
和 到原点的距离都是 3,所以它们的绝对值相等。绝对值把「方向」丢掉,只留下「大小」——这个概念在第 4 章会以「向量长度」的身份再次出现。
更一般地,数轴上 到 的距离是 ,也等于 。比如 到 的距离:
1.3 直角坐标系:用两个数确定平面上的点
数轴解决的是「一条线上在哪里」的问题。但生活在一个平面里,你需要两个数才能说清位置:比如教室里说「第 3 组第 5 排」,电影院里说「A 排 12 号」。
把两条数轴垂直交叉放在一起——横的叫 轴,竖的叫 轴,交点叫原点 ——就得到直角坐标系(也叫坐标平面)。它把平面切成四个区域,叫象限:
- 第一象限:
- 第二象限:
- 第三象限:
- 第四象限:
平面上一个点,用有序数对 表示:第一个数叫横坐标,第二个数叫纵坐标。有序的意思是顺序不能换: 和 是两个不同的点。
读坐标的方法:从原点出发,先沿 轴方向走横坐标这么多格,再沿 轴方向走纵坐标这么多格。比如 :先向右 2 格,再向上 3 格。

为什么先横后纵?这纯粹是约定,全世界统一用这个约定,交流才不混乱。就像读书先从左到右一样。
用 matplotlib 画坐标平面,并标出几个点:
import matplotlib.pyplot as plt
from matplotlib import font_manager
for f in font_manager.findSystemFonts():
if any(k in f for k in ("NotoSansCJK", "NotoSansSC", "wqy", "SimHei", "msyh", "PingFang")):
font_manager.fontManager.addfont(f)
plt.rcParams["font.sans-serif"] = ["Noto Sans CJK SC", "WenQuanYi Zen Hei", "SimHei", "Microsoft YaHei", "PingFang SC"]
plt.rcParams["axes.unicode_minus"] = False
import numpy as np
points = {
"A(2, 3)": np.array([2.0, 3.0]),
"B(-1, 2)": np.array([-1.0, 2.0]),
"C(-3, -2)": np.array([-3.0, -2.0]),
"D(3, -1)": np.array([3.0, -1.0]),
}
fig, ax = plt.subplots(figsize=(6, 6))
ax.axhline(0, color="black", linewidth=1)
ax.axvline(0, color="black", linewidth=1)
ax.grid(True, linestyle=":", alpha=0.5)
ax.set_xlim(-4.5, 4.5)
ax.set_ylim(-4.5, 4.5)
ax.set_aspect("equal")
# 标出四个象限
ax.text(3.2, 3.6, "第一象限", color="gray")
ax.text(-4.2, 3.6, "第二象限", color="gray")
ax.text(-4.2, -3.6, "第三象限", color="gray")
ax.text(3.2, -3.6, "第四象限", color="gray")
for name, p in points.items():
ax.scatter([p[0]], [p[1]], color="tab:red", zorder=3)
ax.annotate(name, p, textcoords="offset points", xytext=(8, 6))
ax.set_xlabel("x 轴")
ax.set_ylabel("y 轴")
ax.set_title("直角坐标系")
fig.savefig("book/public/figs/fig01-coordinate_plane.png", dpi=120, bbox_inches="tight")
plt.close(fig)1.4 两点间的距离:勾股定理登场
现在有一个问题:坐标平面上给定两点 和 ,它们之间的距离 是多少?
1.4.1 先复习勾股定理
直角三角形是有一个角为 90° 的三角形。直角对着的那条最长边叫斜边,另外两条边叫直角边。
勾股定理:直角三角形的两条直角边为 、,斜边为 ,则
推导(面积法,这是最直观的证明):取四个完全相同的直角三角形,直角边为 、,斜边为 ,把它们围成一个边长为 的大正方形。大正方形的面积是 。四个三角形面积各为 ,中间留下的小正方形边长为 ,面积为 。于是:
展开左边:,两边同时减去 ,得到:
1.4.2 把距离问题变成直角三角形问题
设 、。过 作水平线,过 作竖直线,两条线交于 。则 的坐标是 ,三角形 是直角三角形,直角在 :
- 水平直角边: 的长度是 的绝对值,即
- 竖直直角边: 的长度是 的绝对值,即
- 斜边就是 ,也就是我们要求的距离

由勾股定理:
平方之后绝对值符号可以去掉(负数的平方也是正数),于是得到两点间距离公式:
例:、。
3-4-5 直角三角形,是勾股定理最经典的整数例子。
1.5 用 NumPy 表示点,用 matplotlib 画图
NumPy 里的数组 numpy.array 可以放多个数。一个坐标点 就是一个长度为 2 的数组:
import numpy as np
a = np.array([1.0, 2.0]) # 点 A(1, 2)
b = np.array([4.0, 6.0]) # 点 B(4, 6)
# 两个数组逐元素相减:[4-1, 6-2]
diffs = b - a
print("b - a =", diffs)
# 距离公式:平方和再开方
d = np.sqrt(diffs[0] ** 2 + diffs[1] ** 2)
print("距离 d =", d)
# np.hypot 直接算两条直角边的斜边,等价于上式
print("np.hypot =", np.hypot(diffs[0], diffs[1]))运行输出:
b - a = [3. 4.]
距离 d = 5.0
np.hypot = 5.0这里你已经看到了本书最重要的两个思想:
- 用数组装数:一个点就是一个长度为 2 的数组,以后一个向量也是一样;
- 运算按元素进行:
b - a是「对应的横坐标减横坐标、纵坐标减纵坐标」,这正是下一章向量减法的雏形。
下面把坐标平面、点和距离画出来:
# 中文显示设置(系统装有 Noto CJK / 微软雅黑 / 黑体 等字体即可)
import matplotlib.pyplot as plt
from matplotlib import font_manager
for f in font_manager.findSystemFonts():
if any(k in f for k in ("NotoSansCJK", "NotoSansSC", "wqy", "SimHei", "msyh", "PingFang")):
font_manager.fontManager.addfont(f)
plt.rcParams["font.sans-serif"] = ["Noto Sans CJK SC", "WenQuanYi Zen Hei", "SimHei", "Microsoft YaHei", "PingFang SC"]
plt.rcParams["axes.unicode_minus"] = False
import numpy as np
a = np.array([1.0, 2.0])
b = np.array([4.0, 6.0])
fig, ax = plt.subplots(figsize=(6, 6))
# 坐标轴
ax.axhline(0, color="black", linewidth=1)
ax.axvline(0, color="black", linewidth=1)
# 网格
ax.grid(True, linestyle=":", alpha=0.5)
ax.set_xlim(-1, 7)
ax.set_ylim(-1, 8)
ax.set_aspect("equal")
# 点 A、B 与线段 AB
ax.plot([a[0], b[0]], [a[1], b[1]], color="tab:red", linewidth=2, label="距离 d = 5")
ax.scatter([a[0], b[0]], [a[1], b[1]], color="tab:red", zorder=3)
ax.annotate("A(1, 2)", a + np.array([0.2, 0.3]))
ax.annotate("B(4, 6)", b + np.array([0.2, 0.3]))
# 辅助直角边:水平 3 格、竖直 4 格
ax.plot([a[0], b[0]], [a[1], a[1]], color="tab:blue", linestyle="--", label="水平 3")
ax.plot([b[0], b[0]], [a[1], b[1]], color="tab:green", linestyle="--", label="竖直 4")
ax.text(2.2, 1.6, "3", color="tab:blue")
ax.text(4.2, 3.7, "4", color="tab:green")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.legend()
fig.savefig("book/public/figs/fig01-distance.png", dpi=120, bbox_inches="tight")
plt.close(fig)
print("已保存 book/public/figs/fig01-distance.png")动手实践
- 在纸上画一条数轴,标出 五个数,并比较它们的大小。
- 计算:、、、,并用「到原点的距离」解释每个结果。
- 用勾股定理求点 到 的距离,再用 NumPy 验证。
- 仿照 1.5 的代码,画一个三角形(三个顶点任选),用 matplotlib 连接三条边,并用距离公式算出三条边长,验证「两边之和大于第三边」。
- 说出 、、 三个点分别在哪条轴上。
常见错误
| 错误写法/理解 | 原因 |
|---|---|
| 把 画成「向上 2、向右 3」 | 坐标是有序的,先横后纵;横坐标 表示向左 2 格 |
| 认为 | 绝对值是距离,距离永远是正数或 0 |
| 距离公式忘开方,只算到 | 平方和是 ,不是 |
| 距离公式写成 | 漏掉了平方与开方;差值必须平方 |
| matplotlib 图中中文显示为方块 | 缺中文字体:按 1.5 的字体设置代码加载系统字体 |
章末练习
基础
- 在数轴上标出 、、、、,并从小到大排列。
- 计算 :其中 。
- 已知 、、,画出这个直角三角形,并用勾股定理求斜边 的长度。
提高
- 求点 到点 的距离,写出每一步推导。
- 在坐标平面上,到原点距离恰好等于 5 的点有哪些?用距离公式列出关系式,并说出它们围成的图形是什么。
挑战
- 中点公式(第 2 章会再讲):、 的中点坐标为什么是 ?提示:中点 满足 ,且 、、 在同一条直线上。试着用「两端横坐标的平均值」和「两端纵坐标的平均值」写出公式,并用距离公式验证 与 相等。
- 数轴上方程 的解是什么?在数轴上画出解对应的点,并用「距离」解释为什么恰好有两个解。
章末自测
每题选择一个最佳答案。本书不附答案:完成后交由老师或 AI 老师批改讲解。
- 数轴上表示 的点到原点的距离是?
- A.
- B.
- C.
- D.
- 等于?
- A.
- B.
- C.
- D.
- 点 在第几象限?
- A. 第一象限
- B. 第二象限
- C. 第三象限
- D. 第四象限
- 点 到原点的距离是?
- A.
- B.
- C.
- D.
- 到 的距离是?
- A.
- B.
- C.
- D.
- 直角边为 和 的直角三角形,斜边是?
- A.
- B.
- C.
- D.
- 数轴上 到 的距离,正确的表达式是?
- A.
- B.
- C.
- D.
- 关于坐标 ,下列说法正确的是?
- A. 和 是同一个点
- B. 横坐标是第二个数
- C. 先写横坐标,再写纵坐标
- D. 两个数顺序可以随意交换
np.hypot(3, 4)的结果是?- A.
3.0 - B.
4.0 - C.
5.0 - D.
7.0
- A.
- 点 在?
- A. 轴上
- B. 轴上
- C. 第一象限
- D. 原点上
