这是一个有待完善(但可能不会再完善)的版本。

你在学习函数图像平移时或许听说过“上加下减,左加右减”的口诀。

你或许会困惑,按照口诀的叙述,沿 \(x\) 轴正方向平移是减法(右减),沿 \(y\) 轴正方向平移却是加法(上加)。二者甚至不一致!

这篇文章不仅能解决这个疑惑,还将带着你探究对方程的图像进行变换的本质,读完本文,你可以轻松处理任何平移、伸缩、旋转、对称变换。具体来说,包括:

  • 平移;
  • 以平面上任何一条直线为轴伸缩(不仅仅是水平、竖直方向);
  • 绕平面上任何一个点旋转任何角度;
  • 以平面上任何一条直线为轴进行轴对称;

什么是方程的图像?

定义:方程的图像上的点就是方程的解(可以理解为二者是同一个东西的两个名字)。

例如,\(x=1, y=0\),即 \((1,0)\) 是方程 \(x^2+y^2-1=0\) 的一个解,所以 \((1,0)\) 在其图像上。

我们知道,图像由图像上所有的点构成,所以方程所有的解就构成了方程的图像。

方程的图像是比函数图像更大的概念,不像函数那样要求每一个 \(x\) 坐标只对应一个 \(y\) 坐标。

本文的目标是让初中水平(只学过坐标系基本概念)的读者能完全理解前半部分,让高中水平(了解任意角三角函数及相关公式)的读者能理解全部内容,所以语言可能较为“啰嗦”,你可以跳过觉得过于简单的内容。

平移

追本溯源

现在,请假设自己是计算机中一个可以根据方程绘制图像的程序(例如desmos)。这意味着你有极强的计算能力,但并不知道“左加右减”等口诀。

建议在展开答案前试着独立思考。如果这对你比较困难,当然也可以直接展开阅读解决方案。
你需要确保自己完全理解已读内容后再进入下一个情景

情景一:用户给了你方程 \(y^2=x^3-x+1\),要你画出它在 \(-2\leq y \leq 2\) 区域内的图像,你会用什么方法?

解决方案

很简单,列表描点连线三部曲。毕竟,作为有着远超人类算力计算机,当然可以快速描出足够多的点:

  • \(y=-2\) 时,得到方程 \((-2)^2=x^3-x+1\),解得 \(x \approx 1.672\),即过点 \((1.672, -2)\)
  • \(y=-1.99\) 时,得到方程 \((-1.99)^2=x^3-x+1\),解得 \(x \approx 1.666\),即过点 \((1.666, -1.99)\)
  • ……
  • \(y=-1\) 时,得到方程 \((-1)^2=x^3-x+1\),解得 \(x=-1,\ 0,\ 1\),即过点 \((-1, -1),\ (0, -1),\ (1, -1)\)
  • ……
  • \(y=0\) 时,得到方程 \((0)^2=x^3-x+1\),解得 \(x \approx -1.325\),即过点 \((-1.325, 0)\)
  • ……
  • \(y=2\) 时,得到方程 \((2)^2=x^3-x+1\),解得 \(x \approx 1.672\),即过点 \((1.672, 2)\)

将这些点用光滑的曲线连起来,就得到了图像。

有人说这是燕尾夹,于是我不再叫它“椭圆曲线”

情景二:用户叫你将所画图像整体向上平移一个单位,该怎么办呢?

解决方案

将描出的每个点纵坐标加 \(1\) 后重新连线即可:

  • \((1.672, -2) \mapsto (1.672, -1)\)
  • \((1.666, -1.99) \mapsto (1.666, -0.99)\)
  • ……

情景三:用户因为没看这篇文章,不知道如何得到新的图像对应的方程,要求你告诉 TA!

解决方案

回顾情景一中画图的过程:

  • \(y=-2\) 时,得到方程 \((-2)^2=x^3-x+1\),解得 \(x \approx 1.672\),即过点 \((1.672, -2)\)
  • \(y=-1.99\) 时,得到方程 \((-1.99)^2=x^3-x+1\),解得 \(x \approx 1.666\),即过点 \((1.666, -1.99)\)
  • ……

我们的目的是,找到一个(关于 \(x\)\(y\) 的)方程,使得方程的解就是情景二中得到的那些点,具体来说:

  • 过点 \(\bf{(1.672, -1)}\)在带入 \(y=-1(=-2+1)\)仍然能够得到方程 \((-2)^2=x^3-x+1\),从而解出 \(x \approx 1.672\)
  • 过点 \(\bf{(1.666, -0.99)}\)在带入 \(y=-0.99(=-1.99+1)\)仍然能够得到方程 \((-1.99)^2=x^3-x+1\),从而解出 \(x \approx 1.666\)
  • ……

我想你已经从 \(-2=-1-1\)\(-1.99=-0.99-1\) 的提示中看出要找的方程了:\[(y-1)^2=x^3-x+1\]


总结一下目前为止做了什么。

为了得到一个方程的图像向上平移后对应的新方程,我们关注每一个点平移后的结果,发现:

在新方程中传入比原方程更大的 \(y\) 坐标后(\(y=-1.99 \mapsto y=-0.99\)),希望解出与原方程相同的 \(x\) 坐标(\(x \approx 1.666\)

要想实现这一目的很简单,把变大后的 \(y\) 坐标变回去(变小)就好了,所以自然应当使用减法。

向下平移的情况同理,于是我们得到了所谓的“下加上减”:

  • 向下平移 \(m\):将方程中所有\(y\) 替换\((y+m)\)
  • 向上平移 \(m\):将方程中所有\(y\) 替换\((y-m)\)

可见,更通用的说法是“下加上减”,而“上加下减”是 \(y+m=f(x)\) 移项成 \(y=f(x)-m\) 的结果,二者并无对错之分。

用完全相同的理解方式(试着自己推导一遍!),可以得到“左加右减”:

  • 向左平移 \(n\):将方程中所有\(x\) 替换\((x+n)\)
  • 向右平移 \(n\):将方程中所有\(x\) 替换\((x-n)\)

成果检验

如果你完全理解了刚才的操作,这对你应该不是什么难题。

将方程 \[x^4+y^4 = 3xy(x+y)+0.01\] 的图像向右平移 \(2\) 单位,向下平移 \(3\) 单位后得到的方程是?

答案

将方程中所有的 \(x\) 替换为 \((x-2)\),所有的 \(y\) 替换为 \((y+3)\) 即可:

\[(x-2)^4+(y+3)^4 = 3(x-2)(y+3)(x+y+1)+0.01\]

顺便说一句,如果你试着用软件画一下图像,会得到一只鲨鱼 🦈

伸缩

伸缩,顾名思义,是对图像进行拉伸或收缩,由伸缩的倍数描述。

从视频中可以看到,以方向相同的直线为轴伸缩相同倍数后,得到的图形是完全相同的,但在坐标系中的位置通常不同。

约定

考虑到“拉伸 \(\frac{1}{2}\)倍”和“收缩 \(2\)倍”这样的表述会让人感到困惑,我们将不再使用术语“拉伸”和“收缩”,而统一使用“伸缩”:“伸缩\(2\) 倍”意味着图像会变宽,“伸缩 \(\frac{1}{2}\) 倍”意味着图像会变窄。

我们将会这样描述一个伸缩(二者意义完全相同,只是两种表述):

  • 以【某条直线】为轴伸缩 \(k\)
  • 沿【某条直线】伸缩 \(k\)

其中 \(k\) 是正实数。

最简单的伸缩

我们先来研究最简单的伸缩:以 \(x\) 轴或以 \(y\) 轴为轴的伸缩 。

如果你完全理解了刚才处理平移的方法,应该有能力独自完成推导。不过,这次我会带着你再来一次,并增加一点点难度,从而增强你的理解。

问题:将方程 \(y^2=x^3-x+1\) 的图像以 \(x\) 轴为轴伸缩 \(3\) 倍,同时以 \(y\) 轴为轴伸缩 \(\frac{1}{2}\) 倍。求变换后图像对应的方程。

第一步:画出图像(与平移部分【情景一】完全一样)

第二步:变换点,将每个点横坐标乘 \(\frac{1}{2}\),纵坐标乘 \(3\)

  • \((1.672, -2) \mapsto (0.836, -6)\)
  • \((1.666, -1.99) \mapsto (0.833, -5.97)\)
  • ……

第三步:寻找方程

为了构造一个(关于 \(x\)\(y\) 的)方程,使得方程的解就是第二步中得到的那些点,可以仿照平移部分【情景三】:

  • 过点 \(\bf{(0.836, -6)}\)在带入 \(x=0.836,\;y=-6\) 时得到等式 \((-2)^2=(1.672)^3-1.672+1\),使得方程能成立
  • 过点 \(\bf{(0.833, -5.97)}\)在带入 \(x=0.833,\;y=-5.97\) 时得到等式 \((-1.99)^2=(1.666)^3-1.666+1\),使得方程能成立
  • ……

这次你应该轻松看出了要找的方程:\[(\frac{y}{3})^2=(2x)^3-2x+1\]

用一句话解释:对原方程中的变量做替换,通过抵消点的变换让等式能成立。

总结:

  • \(x\) 轴为轴伸缩到原来的 \(k(k>0)\) 倍:将方程中所有\(y\) 替换\((y/k)\)
  • \(y\) 轴为轴伸缩到原来的 \(k(k>0)\) 倍:将方程中所有\(x\) 替换\((x/k)\)

更复杂的伸缩

将方程 \(y=x^2\) 以直线 \(x=1\) 为轴伸缩到原来的 \(\frac{1}{3}\) 倍,怎么求得到的方程呢?

其实只需要组合使用我们已经学会的变换就好了:

  • 向左平移 \(1\)\(y=(x+1)^2\)
  • \(y\) 轴为轴伸缩到原来的 \(\frac{1}{3}\) 倍:\(y=(3x+1)^2\)
  • 向右平移 \(1\)\(y=(3(x-1)+1)^2\),即\(y=(3x-2)^2\)

以直线 \(y=x\) 为轴伸缩呢?

  • 将图像顺时针旋转 \(45^\circ\),使得直线 \(y=x\) 旋转后与 \(x\) 轴重合
  • \(x\) 轴为轴伸缩
  • 将图像逆时针旋转 \(45^\circ\),回到原来的位置

旋转变换的方法将在后文介绍。

以直线 \(y=x+2\) 为轴伸缩呢?

  • 将图像向下平移 \(2\),使得直线 \(y=x+2\) 平移后与直线 \(y=x\) 重合
  • 以直线 \(y=x\) 为轴伸缩
  • 将图像向上平移 \(2\),回到原来的位置

顺序很重要

需要注意的是,先平移后伸缩和先伸缩后平移的结果通常并不相同,这意味着两个操作不能交换顺序。这在直观上是显然的,我们也可以从代数的角度进行验证。

\(y=x^2\) 的图像为例。

  • 向右平移 \(1\)\(y=(x-1)^2\)
  • 沿 \(y\) 轴伸缩 \(\frac{1}{3}\) 倍:\(y=(3x-1)^2\)

注意不要认为第二步需要将 \((x-1)\) 替换为 \(3(x-1)\),在第一步平移之后,我们处理的对象已经由 \(y=x^2\) 变成了 \(y=(x-1)^2\),进行变换时自然还是直接对变量 \(x\) 进行替换。

另一种顺序:

  • 沿 \(y\) 轴伸缩 \(\frac{1}{3}\) 倍:\(y=(3x)^2\)
  • 向右平移 \(1\)\(y=(3(x-1))^2\)

发展数学工具

下一步我们将研究旋转。或许你已经感受到,伸缩部分的推理比平移部分更加难以表述清楚。因此,在研究旋转之前,我们有必要从刚在的经验中抽象出一套通用的方法辅助我们研究问题。

接下来请不要被新的概念和名词吓到,它们没什么恐怖的,只是给刚才做的事起个名字方便以后称呼罢了。

Alright, let's do this one last time. My name is Peter Parker.

再看一眼平移【情景二】

  • \((1.672, -2) \mapsto (1.672, -1)\)
  • \((1.666, -1.99) \mapsto (1.666, -0.99)\)
  • ……

我们不再关注每个点具体的数值,而是用字母代表它们:

\[(a, b) \mapsto (a, b+1)\]

是不是很像函数?其实就是,只不过中学阶段讨论的函数把实数对应到实数,而这里是把平面上的点对应到点。不妨给这样的函数取一个更贴切的别名——变换

让我们看更多变换的例子:

  1. 向左平移 3,向上平移 2:\((a, b) \mapsto (a-3, b+2)\)
  2. 向右平移 3,向下平移 2:\((a, b) \mapsto (a+3, b-2)\)
  3. \(x\) 坐标变成原来的 \(2\) 倍:\((a, b) \mapsto (2a, b)\)
  4. \(x\) 坐标变成原来的 \(\frac{1}{2}\)\((a, b) \mapsto (\frac{a}{2}, b)\)

如果我们对一个点先进行变换 1,再进行变换 2,就回到了原来的位置,两个变换相互抵消,相当于什么都没干。类似于相反数的定义,我们称这样的两个变换互为逆变换。显然,变换 3 和变换 4 也互为逆变换。

“逆变换”意味着抵消,这正是我们在平移和伸缩这两节中做的事情:

如果我们对图像进行某个变换,对于图像上某个点 \(P(a,b)\),设其变换后成为了 \(P'(a',b')\)。自然地,通过逆变换就能将 \(P'\) 变回 \(P\) 。换句话说,我们想要构造出的新方程满足这一特性:新方程的解就是那些经过逆变换后落在原来的图像上(使得原方程成立)的点

所以构造新方程时,我们只需要人为地对传入的坐标进行逆变换,即对原方程中所有的 \(x\)\(y\) 进行替换。例如:

重复上一个问题:将方程 \(y^2=x^3-x+1\) 的图像以 \(x\) 轴为轴伸缩 \(3\) 倍,同时以 \(y\) 轴为轴伸缩 \(\frac{1}{2}\) 倍。求变换后图像对应的方程。

考虑每个点发生的变换 \[(a, b) \mapsto (\frac{a}{2}, 3b),\] 其逆变换为 \[(a, b) \mapsto (2a, \frac{b}{3}).\]

所以将原方程中所有的 \(x\) 替换为 \(2x\),所有的 \(y\) 替换为 \(\frac{y}{3}\),就得到了新方程 \[(\frac{y}{3})^2=(2x)^3-2x+1.\]

总之,要想对图像进行变换,只需考察点如何变化,并找到其逆变换,对原方程进行替换,就得到了新方程。

旋转

有了上一节得出的结论,研究旋转会很容易。

我们只研究如何关于原点旋转。关于其它点旋转时,可以平移图像使旋转点去到原点的位置后再旋转,旋转完平移回去。

先给出旋转变换的公式:

将点 \((a, b)\) 绕原点逆时针旋转某个角 \(\theta\)\((a, b) \mapsto \begin{pmatrix}a\cos\theta - b\sin\theta \\ a\sin\theta + b\cos\theta\end{pmatrix}\)
将点 \((a, b)\) 绕原点顺时针旋转某个角 \(\theta\)\((a, b) \mapsto \begin{pmatrix}a\cos\theta + b\sin\theta \\ b\cos\theta - a\sin\theta\end{pmatrix}\)

为了让排版更紧凑,文中有些地方会使用 \(\begin{pmatrix}a \\ b\end{pmatrix}\) 代替 \((a,b)\)

旋转变换公式的证明

对于点 \(P(a,b)\),将其绕原点逆时针旋转 \(\theta\) 得到的点 \(P'(a', b')\) 可以这样计算:

旋转变换公式的证明

如图,记点 \(P\) 到原点 \(O\) 的距离 \(r=\sqrt{a^2+b^2}\),从 \(x\) 轴正方向到 \(OP\) 的夹角为 \(\varphi(0\leq\varphi<2\pi)\),则 \(a=r\cos\varphi,\;b=r\sin\varphi\),于是有

\[ \displaylines{ a' = r\cos(\varphi + \theta) = r(\cos\varphi\cos\theta - \sin\varphi\sin\theta) = a\cos\theta - b\sin\theta\\ b' = r\sin(\varphi + \theta) = r(\sin\varphi\cos\theta + \cos\varphi\sin\theta) = b\cos\theta + a\sin\theta } \]

顺时针旋转 \(\theta\) 就是逆时针旋转 \(-\theta\),所以在上式中把 \(\theta\) 替换成 \(-\theta\) 就能得到顺时针旋转的公式。

以方程 \(x^{\frac{2}{3}}+y^{\frac{2}{3}}=1\) 为例,如果要将其图像顺时针旋转 \(\frac{\pi}{6}\),只需找到其逆变换——逆时针旋转 \(\frac{\pi}{6}\)

\[(a, b) \mapsto \begin{pmatrix}a\cos\frac{\pi}{6} - b\sin\frac{\pi}{6} \\ a\sin\frac{\pi}{6} + b\cos\frac{\pi}{6}\end{pmatrix},\]

然后将方程中所有的 \(x\) 替换为 \(x\cos\frac{\pi}{6} - y\sin\frac{\pi}{6}\),同时把方程中所有的 \(y\) 替换为 \(x\sin\frac{\pi}{6} + y\cos\frac{\pi}{6}\),得到

\[\left(x\cos\frac{\pi}{6} - y\sin\frac{\pi}{6}\right)^{\frac{2}{3}}+\left(x\sin\frac{\pi}{6} + y\cos\frac{\pi}{6}\right)^{\frac{2}{3}}=1\]

效果演示

对称

最简单的对称

以下结论是显然的:

  • 将一个点沿 \(x\) 轴对称:\((a, b) \mapsto (a, -b)\)
  • 将一个点沿 \(y\) 轴对称:\((a, b) \mapsto (-a, b)\)

它们的逆变换都是本身,因为对称两下就回到了原位。

所以,将方程的图像沿 \(x\) 轴对称只需把所有 \(y\) 替换成 \(-y\);沿 \(y\) 轴对称只需把所有 \(x\) 替换成 \(-x\)

例如,直线 \(y=2x+1\) 沿 \(x\) 轴对称得到 \(-y=2x+1\);沿 \(y\) 轴对称得到 \(y=-2x+1\)

更复杂的对称

接下来研究对称轴过原点的情况,即对称轴为直线 \(y=kx\)\(x=0\)

由于过原点,倾斜角可以完全确定一条直线。我们记对称轴的倾斜角为 \(\varphi\),此时对称变换的公式是

\[(a, b) \mapsto \begin{pmatrix}a\cos 2\varphi + b\sin 2\varphi \\ a\sin 2\varphi - b\cos 2\varphi\end{pmatrix}\]

什么是直线的倾斜角?

倾斜角 \(\varphi\) 的范围是 \([0, \pi)\),对于直线 \(x=0\),其倾斜角为 \(\pi/2\);对于直线 \(y=kx+b\),满足 \(\tan\varphi=k\)

对称变换公式的证明

我们已经知道如何关于 \(x\) 轴对称,所以可以先将对称轴旋转到 \(x\) 轴的位置再对称,然后旋转回去。

  1. 旋转:将点绕原点顺时针旋转 \(\varphi\),这样对称轴经过旋转与 \(x\) 轴重合 \[(a, b) \mapsto \begin{pmatrix}a\cos\varphi + b\sin\varphi \\ b\cos\varphi - a\sin\varphi\end{pmatrix}\]
  2. 对称:将旋转后的点关于 \(x\) 轴对称(即 \(y\) 坐标变为相反数) \[\begin{pmatrix}a\cos\varphi + b\sin\varphi \\ b\cos\varphi - a\sin\varphi\end{pmatrix} \mapsto \begin{pmatrix}a\cos\varphi + b\sin\varphi \\ - b\cos\varphi + a\sin\varphi\end{pmatrix}\]
  3. 旋转:将对称后的点绕原点逆时针旋转 \(\varphi\) \[\begin{pmatrix}a\cos\varphi + b\sin\varphi \\ - b\cos\varphi + a\sin\varphi\end{pmatrix} \mapsto \begin{pmatrix}(a\cos\varphi + b\sin\varphi)\cos\varphi - (- b\cos\varphi + a\sin\varphi)\sin\varphi \\ (a\cos\varphi + b\sin\varphi)\sin\varphi + (- b\cos\varphi + a\sin\varphi)\cos\varphi\end{pmatrix}\]

最终结果经过化简就可以得到 \[\begin{pmatrix}a\cos 2\varphi + b\sin 2\varphi \\ a\sin 2\varphi - b\cos 2\varphi\end{pmatrix}\]

同样,它的逆变换是它本身,所以将一个方程的图像关于过原点且倾斜角为 \(\varphi\) 的直线对称,只需将方程中所有的 \(x\) 替换成 \(x\cos 2\varphi + y\sin 2\varphi\),同时把所有 \(y\) 替换成 \(x\sin 2\varphi - y\cos 2\varphi\)

计算方法

对于直线 \(y=kx\),我们知道 \(k=\tan\varphi\),可使用正切半角公式(万能公式)求\(\cos 2\varphi,\;\sin 2\varphi\)

\[\displaylines{\cos 2\varphi = \frac{1-\tan^2\varphi}{1+\tan^2\varphi} =\frac{1-k^2}{1+k^2}\\\sin 2\varphi = \frac{2\tan\varphi}{1+\tan^2\varphi} = \frac{2k}{1+k^2}}\]

如果对称轴不过原点,就先按照前文方法平移方程的图像,使对称轴经过原点再对称,随后平移回去。

更进一步

如果你无法理解下面的内容,建议跳过此部分。

更多变换

变换的类型当然不局限于平移旋转伸缩对称,只要变换是可逆的,我们就可以按照替换的方法写出变换后图像对应的方程。读者可自行了解线性变换、反演等变换。

显然,并不是所有的变换都是可逆的。举一个最极端的反例,\((a,b) \mapsto (0,0)\),整个图像坍缩成奇点,所有信息都不可逆地损失了。

更抽象的语言

对于任何一个关于方程 \(x\)\(y\) 的方程 \(F(x,y)=0\), 其图像为 \[C = \{(x,y)\in\mathbb{R}^2\ |\ F(x,y)=0\}.\]

已知某个单射 \(f:C \to \mathbb{R}^2\) 对平面上的点进行变换。

\(C\) 上每一个点通过 \(f\) 进行变换,将得到的图像记为 \(C'\),对应的方程设为 \(G(x,y)=0\),即 \[C' = \{(x,y)\in\mathbb{R}^2\ |\ G(x,y)=0\}.\] \(C'\) 应当满足 \[f(x,y)\in C' \iff (x,y)\in C.\] 于是有 \[G(f(x,y)) = F(x,y) = 0,\qquad\forall(x,y)\in C,\]\((x,y)\) 替换为 \(f^{-1}(x,y)\),得到 \[G(x,y) = G(f(f^{-1}(x,y))) = F(f^{-1}(x,y)),\] 所以我们想找的平移后的方程是 \[F(f^{-1}(x,y)) = 0.\]

习题

练习 1:将方程 \(y=x\) 的关于直线 \(y=2x+1\) 对称,再沿直线 \(y=-6\) 伸缩 \(\frac{1}{2}\) 倍,得到的方程是?

答案

关于直线 \(y=2x+1\) 对称:

  1. 向下平移 \(1\)\(y\) 替换为 \(y+1\)
    \(y+1=x\)
  2. 关于直线 \(y=2x\) 对称(读者可自行计算得到:\(x\) 替换为 \(-\frac{3}{5}x+\frac{4}{5}y\)\(y\) 替换为 \(\frac{4}{5}x+\frac{3}{5}y\)
    \(\frac{4}{5}x+\frac{3}{5}y + 1 = -\frac{3}{5}x+\frac{4}{5}y\)
    化简得 \(y=7x+5\)
  3. 向上平移 \(1\)\(y\) 替换为 \(y-1\)
    \(y-1=7x+5\),即 \(y=7x+6\)

沿直线 \(y=-6\) 伸缩 \(\frac{1}{2}\) 倍:

  1. 向上平移 \(6\)\(y\) 替换为 \(y-6\)
    \(y-6=7x+6\)
  2. 关于 \(x\) 轴伸缩 \(\frac{1}{2}\) 倍(\(y\) 替换为 \(2y\)
    \(2y-6=7x+6\)
  3. 向下平移 \(6\)\(y\) 替换为 \(y+6\)
    \(2(y+6)-6=7x+6\),即 \(2y=7x\)

故最终答案为 \[2y=7x\]

练习 2:将方程 \((x^2+y^2-1)^3=x^2y^3\) 的图像按顺序依次

  1. 关于直线 \(y=x+3\) 对称;
  2. 向上平移 \(1\) 单位;
  3. 以 直线 \(x=-6\) 为轴,将图像宽度拉伸到原来的 \(2\) 倍;
  4. 关于 \(y\) 轴对称,

求最终得到的方程。

答案

\[((y-4)^2+\left(\frac{x}{2}\right)^2-1)^3 + (y-4)^2\left(\frac{x}{2}\right)^3 = 0\]