【幾何系列】復數基礎與二維空間旋轉


本文我們討論復數及其旋轉的含義。復數很有意思,本文介紹了復數的基本定義和性質,以及它關於旋轉的幾何意義。

復數對於旋轉的表示非常重要:

1. 它引入了旋轉算子(rotational operator)的思想:可以通過復數表示一個旋轉變換。

2. 它是四元數多向量的內在屬性。

雖然我們暫時不討論四元數多向量(后面文章會介紹),但是我們會討論復數的旋轉含義(復平面上的 2D 旋轉),以及引入的旋轉子(rotor),我們發現通過特定的復數可以描述一個 2D 旋轉。

介紹

復數(complex number)又稱為數字王國中的“國王”,它可以解決普通實數不能很好解決的問題。

例如,對於以下方程:

$$x^2+1=0$$

盡管方程如此簡單,但並沒有實數解。實際上,實數無法解決這樣的問題:

$$x=\sqrt{-1}$$

但這沒有妨礙數學家們找到解決此類問題的方法,他們提出一個很牛很簡單的思想,就是承認 $i$ 的存在,它滿足 $i^2=-1$,於是前面的方程我們可以解出:

$$x=\pm i$$

那么 $i$ 到底是什么呢?我們可以不必糾結,$i$ 就是數學家提出的數學工具,一個簡單的數學對象,滿足 $i^2=-1$。本文會探討這個數學工具對於旋轉如何發揮作用。

復數基礎

復數的定義

復數由兩個部分組成:實部(real part)虛部(imaginary part)。實部就是我們平常遇到的數(正數、負數、0),而虛部是一個實數和 $i$ 的乘積。

例如,$2+3i$ 是一個復數,2 是實部,$3i$ 是虛部。

復數集就像是實數集的擴展,它包含了所有實數(虛部為 0)。而虛部不為 0 的復數不是實數。以下都屬於復數:

  • 2
  • $2+2i$
  • $1-3i$
  • $-4i$
  • $17i$
  • $isin\theta$
  • $4.5+icos\theta$

不過在 Python 中,復數的 $i$ 符號用 $j$ 表示,在 Jupyter 中運行 Python:

1 z = 3 + 4j
2 z, z.real, z.imag   # 復數、實部、虛部

輸出:

((3+4j), 3.0, 4.0)
5.0

復數的公理

下面的公理體現了復數的性質。對於任意的復數 $z_1$、$z_2$ 和 $z_3$,滿足:

  • 加法交換律:$z_1+z_2=z_2+z_1$
  • 加法結合律:$(z_1+z_2)+z_3=z_1+(z_2+z_3)$
  • 乘法交換律:$z_1z_2=z_2z_1$
  • 乘法結合律:$(z_1z_2)z_3=z_1(z_2z_3)$
  • 乘法分配律:$z_1(z_2+z_3)=z_1z_2+z_1z_3$、$(z_1+z_2)z_3=z_1z_3+z_2z_3$

其實復數的這些加法和乘法的公理和實數一樣的。由於復數集里面包含實數集,如果不和實數一致,反而比較奇怪的。

復數的模

模(modulus)長度的含義。對於復數 $z=a+bi$,它的模定義為:

$$\left | z \right |=\sqrt{a^2+b^2}$$

例如,$3+4i$ 的模為 5。

后面我們會看到,模定義在復數的極坐標表示中的作用。

例子:

abs(3 + 4j)   #

輸出:

5.0

復數的加減

對於兩個復數:$z_1=a+bi$ 和 $z_2=c+di$,其加減法為

$$z_1\pm z_2=(a\pm c)+(b\pm d)i$$

即實部和虛部分別相加減。

例子:

(2 + 3j) + (3 - 4j)  # 加法

輸出:

(5-1j)

復數的標量乘法

標量乘法同樣符合我們的直覺。對於標量 $\lambda$ 和復數 $a+bi$,有

$$\lambda(a+bi)=\lambda a+\lambda bi$$

例如:

$$2(3+5i)=6+10i$$

2 * (3 + 5j)  # 標量乘法

輸出:

(6+10j)

兩個復數的乘積

兩個復數的乘積就是各項分別相乘並相加。對於兩個復數 $z_1=a+bi$ 和 $z_2=c+di$,有

\begin{align*}
z_1z_2 &= (a+bi)(c+di)\\
&= ac+adi+bci+bdi^2\\
&= (ac-bd)+(ad+bc)i
\end{align*}

例如,對於 $z_1=3+4i$ 和 $z_2=5-2i$,有

\begin{align*}
z_1z_2 &= (3+4i)(5-2i)\\
&= 15-6i+20i-8i^2\\
&= 23+14i
\end{align*}

可以看到。兩個復數的加減和乘積都是一個復數。

(3 + 4j) * (5 - 2j)  # 兩復數的乘法

輸出:

(23+14j)

共軛復數

兩個復數相乘還有個特殊情況:

\begin{align*}
(a+bi)(a-bi)&=a^2-b^2i \\
&= a^2+b^2
\end{align*}

其中 $a-bi$ 稱作是 $a+bi$ 的共軛復數(conjugate complex number),又稱復共軛、復數共軛。

更一般的定義,$z=a+bi$ 的共軛復數用 $\bar{z}$ 或 $z^*$ 表示,其中:

$$z^*=a-bi$$

$$zz^*=a^2+b^2=\left |z  \right |^2$$

例子:

(3 + 4j).conjugate()  # 共軛復數

輸出:

(3-4j)

兩個復數的除法

利用共軛復數的性質,我們再來看復數的除法。

對於 $z_1=a+bi$ 和 $z_2=c+di$,其中 $z_2\neq 0$。

那么,

\begin{align*}
\frac{z_1}{z_2}&=\frac{z_1z_2^*}{z_2z_2^*} \\
&= \frac{z_1z_2^*}{\left | z_2 \right |^2} \\
&= \frac{(a+bi)(c-di)}{c^2+d^2} \\
&= \frac{(ac+bd)+(bc-ad)i}{c^2+d^2}
\end{align*}

例子:

\begin{align*}
\frac{4+3i}{3+4i}&=\frac{(4*3+3*4)+(3*3-4*4)i}{3^2+4^2} \\
&= \frac{24}{25}-\frac{7}{25}i
\end{align*}

(4 + 3j) / (3 + 4j)  # 兩復數的除法

輸出:

(0.96-0.28j)

復數的逆

已知一個復數 $z\neq 0$,定義它的逆 $z^{-1}=\frac{1}{z}$。利用共軛復數的性質,我們可以推導:

$$\frac{z^{-1}}{z^*}=\frac{1}{zz^*} = \frac{1}{\left | z \right |^2}$$

$$\Rightarrow z^{-1}=\frac{z^*}{\left | z \right |^2}$$

例子:

\begin{align*}
\frac{1}{3+4i} &=(3+4i)^{-1} \\
&= \frac{3-4i}{25} \\
&= \frac{3}{25}-\frac{4}{25}i
\end{align*}

檢查:$(3+4i)(\frac{3}{25}-\frac{4}{25}i)=\frac{9}{25}-\frac{12}{25}i+\frac{12}{25}i+\frac{16}{25}=1$

1 / (3 + 4j)  # 復數求逆

輸出:

(0.12-0.16j)

復數與旋轉

首先,考慮一條實數軸,想象對於一個實數而言,與它的相反數究竟有什么關系?

我們可以把相反數看成:原實數繞原點旋轉了 180°

 

 

例如,“2” 旋轉 180° 后變成 -2,“-3” 旋轉 180° 后變成 “3”。由於復數的定義,我們可以把相反數 $-n$ 寫成:

$$-n=i^2n$$

於是我們可以把乘以 $i^2$ 看成是繞原點 180° 的旋轉。那么乘以 $i$ 表示什么呢?

90° 的旋轉

復平面

當我們用復數的實部和虛部構建一個 2D 坐標系,這就是復平面(complex plane)。復平面的橫坐標表示實部,縱坐標表示虛部。

使用復平面,我們來觀察這個 90° 的旋轉是什么意思。

下面我們畫出 4 個復數:$z_1=1+2i$、$z_2=-2+i$、$z_3=-1-2i$、$z_4=2-i$,它們分別可以代表 4 個長度相等的向量:$u$、$v$、$w$、$a$。之所以長度相等,是因為這 4 個復數的模相等。

 

 

我們可以看到它們依次逆時針旋轉 90°。例如,

對 $u$ 旋轉 90°:$i(1+2i)=-2+i=v$,得到 $v$。

對 $v$ 旋轉 90°:$i(-2+i)=-1-2i=w$,得到 $w$。

對 $w$ 旋轉 90°:$i(-1-2i)=2-i=a$,得到 $a$。

對 $a$ 旋轉 90°:$i(2-i)=1+2i=u$,得到 $u$。

於是我們發現,要對一個復數(這個復數在復平面可以表示為一個 2D 向量)旋轉 90°,只需乘以 $i$ 即可。

幾百年前,Euler 通過復平面把復數畫了出來,而其中蘊含的“復數可以表示旋轉”的思想,在現在很多領域得到了應用。

極坐標表示

我們再整理一下上兩節的內容。我們實際上發現:復數在幾何上的有一些有意思的性質。

如果我們用復數來表示一個 2 維直角坐標系上的向量的話(當然復數是一個數學工具,也可以表示其他含義),看起來乘以 $i$ 表示旋轉 90°。

那么自然地,我們就會去進一步思考,如果旋轉任意角度應該怎么表達呢?旋轉 45° 究竟是乘以 $\frac{1}{2}i$,還是乘以 $\sqrt{i}$,還是乘以其他的什么東西?

以及,為什么乘以復數會表示旋轉?

為了解決這兩個問題,我們開始引入復平面上的極坐標表示

 

在這樣的極坐標下,復數 $z=a+bi$ 可以通過長度 $\left r=| z \right |$ 和角度 $\theta=arg(z) $ 來唯一確定。

長度 $r$ 等於復數的模,而角度 $\theta$ 是實數軸和復數所表示的向量的夾角,稱為幅角(argument),記為 $arg(z)$。接下來根據三角函數,我們有 $a=rcos\theta $ 和 $b=rsin\theta $,於是可以得到:

\begin{align*}
z&=a+bi \\
&=rcos\theta+irsin\theta \\
&=r(cos\theta+isin\theta)
\end{align*}

根據歐拉公式 $e^{i\theta}=cos\theta+isin\theta$,復數的極坐標表示可以寫成更為簡潔的形式:

$$z=re^{i\theta}$$

關於歐拉公式

Euler 提出的歐拉公式體現了自然底數 $e$ 和三角函數 $sin\theta$、$cos\theta$ 之間的關系。

關於它的含義一眼看去並不直觀。歐拉方程的其中一種證明方法是利用泰勒級數展開式把 $e^x$ 、$cosx$ 和 $sinx$ 關聯起來。以下是簡單證明。

根據級數展開:

$$e^{i\theta}=1+(i\theta)+\frac{(i\theta)^2}{2!}+\frac{(i\theta)^3}{3!}+...$$

$$cos\theta=1-\frac{\theta^2}{2!}+\frac{\theta^4}{4!}-\frac{\theta^6}{6!}+...$$

$$sin\theta=1-\frac{\theta^3}{3!}+\frac{\theta^5}{5!}-\frac{\theta^7}{7!}+...$$

根據復數的定義 $i^2=-1$,於是有:

\begin{align*}
e^{i\theta} &= 1 + i\theta - \frac{\theta^2}{2!} - i\frac{\theta^3}{3!} + \frac{\theta^4}{4!}+i\frac{\theta^5}{5!}- \frac{\theta^6}{6!} - i\frac{\theta^7}{7!}+...\\
&= (1-\frac{\theta^2}{2!}+ \frac{\theta^4}{4!}- \frac{\theta^6}{6!}+...)+i(\theta-\frac{\theta^3}{3!}+\frac{\theta^5}{5!}-\frac{\theta^7}{7!}+...) \\
&=cos\theta+isin\theta
\end{align*}

到了這種表達形式后,我們再看兩個復數的乘法,就會發現它的幾何含義。

給定兩個任意用極坐標表示的復數:$z_1=r_1e^{i\theta _1}$ 和 $z_2=r_2e^{i\theta _2}$。那么我們會得到:

\begin{align*}
z_1z_2 &= r_1r_2e^{i\theta _1}e^{i\theta _2} \\
&= r_1r_2e^{i(\theta _1+\theta _2)}
\end{align*}

可以看到,兩個復數的乘積得到另一個復數。

它的模等於兩個復數的模的乘積:$\left | z_1z_2 \right |=r_1r_2$。

它的幅角等於兩個復數的幅角的和:$arg(z_1z_2)=\theta _1+\theta _2$

於是看起來,考慮復平面這個幾何情形,乘以一個復數,可以同時帶來兩種變換的效果

1. 長度的縮放(通過改變模長)。

2. 旋轉(通過改變幅角)。

旋轉子

接下來一個很自然的想法,就是:乘以一個什么樣的復數,不會產生縮放,只會產生旋轉

顯然,通過前面極坐標下自然底數的表達形式的推導,我們知道乘以一個模為 1 的復數時,不會導致縮放,只會產生旋轉

這樣的復數就稱為旋轉子(rotor),旋轉子提供了“純”旋轉動作的數學表示,它可以將復數旋轉任意角度。一般而言,將復數旋轉角度 $\theta$ 的旋轉子定義為:

$$R_\theta =cos\theta + isin\theta =e^{i\theta}$$

例如,對於復數 $2+2i$,我們如果需要對它進行逆時針 45° 的旋轉,需要乘以:

$$1\cdot e^{i\cdot 45^{\circ}}=cos45^{\circ}+isin45^{\circ}=\frac{\sqrt{2}}{2}+\frac{\sqrt{2}}{2}i$$

我們通過手算計算出其乘積為 $2\sqrt{2}i$

$$(\frac{\sqrt{2}}{2}+\frac{\sqrt{2}}{2}i)(2+2i)=\sqrt{2}+\sqrt{2}i+\sqrt{2}i+\sqrt{2}i^2=2\sqrt{2}i$$

如果通過 Python 計算會得到其對應的結果:

1 from math import pi, cos, sin
2 
3 theta = pi / 4  # 定義角度
4 z1 = 2 + 2j
5 z2 = cos(theta) + 1j * sin(theta)
6 print(z1)
7 print(z2)
8 print(z1 * z2)

輸出:

(2+2j)
(0.7071067811865476+0.7071067811865476j)
2.8284271247461903j

通過下圖,我們看到了旋轉子的“純”旋轉效果。

接下來,我們看看旋轉子的共軛復數是什么。由於旋轉子模為 1,而根據前面共軛復數的定義,我們不難證明:旋轉子的共軛復數等於該旋轉子的逆

對於旋轉子 $R_\theta=e^{i\theta}=cos\theta+isin\theta$,

它的共軛復數:$(R_\theta)^*=cos\theta-isin\theta=cos(-\theta)+isin(-\theta)=R_{-\theta}$

它的逆:$e^{i\theta}e^{-i\theta}=1\Rightarrow (R_\theta)^{-1}=e^{-i\theta}=R_{-\theta}$

那么接着前面的例子,$z_1$ 乘以 $z_2$ 的共軛復數(或者逆)后的效果,是順時針旋轉 45°

$z_2$ 的共軛復數(或者逆)為:$R_{-\theta}=\frac{\sqrt{2}}{2}-\frac{\sqrt{2}}{2}i$

手算:$(\frac{\sqrt{2}}{2}-\frac{\sqrt{2}}{2}i)(2+2i)=\sqrt{2}-\sqrt{2}i+\sqrt{2}i-\sqrt{2}i^2=2\sqrt{2}$

用代碼計算結果:

1 z3 = z2.conjugate()  # z2 的共軛復數
2 print(z3)
3 print(z1 * z3)

輸出:

(0.7071067811865476-0.7071067811865476j)
(2.8284271247461903+0j)

最后再看看復平面圖,確認復數 $z_1$ 沿着相反方向旋轉 45°:

 

 “逆”的含義也在於此,既然旋轉子表示旋轉任意角度,那么它的逆就應該是“抵消”這種旋轉效果,於是它的作用就是朝相反的方向旋轉對應的角度

到此為止,我們已經可以用復數表示二維空間的任意旋轉角度,並且利用復數的逆/共軛復數來表示旋轉的抵消作用。后面我還會繼續發布與旋轉有關的文章。

 

原文作者:雨先生
原文鏈接:https://www.cnblogs.com/noluye/p/11964513.html
許可協議:知識共享署名-非商業性使用 4.0 國際許可協議

 

總結

  • 我們談了復數的基礎:復數的定義、公理、加減乘除、模、共軛復數、逆。復數域對實數域進行了很好的擴展,使我們可以去描述旋轉。
  • 我們定義了復平面,作為我們討論的二維直角坐標系。
  • 我們首先給出了復數的極坐標表示,並且利用歐拉公式推導出了等價的自然底數的表示。到了這一步,復數對於二維旋轉的刻畫性質已經呼之欲出。
  • 復數的乘法運算表現了伸縮旋轉的兩種性質,通過對模進行約束(模長等於 1),我們最終得到只表示旋轉的復數,稱為旋轉子
  • 在旋轉子中,共軛復數和逆是相等的,而逆表示相反方向的旋轉

參考

  • Rotation Transforms for Computer Graphics by John Vince
  • 歐拉公式

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM