有理曲線的構造

接上一篇「曲線插值:大直若曲」。算法

時空

當我生活在一條多項式曲線 $P(t)$ 構造的空間裏,要讓我感覺到這個空間是彎曲的,須要給我一個測量工具,讓我可以測量這個空間裏任意兩個 $t$ 值 $t_a$ 與 $t_b$ 對應的兩個點 $P_a$、$P_b$ 之間的距離,即 $d(P_a, P_b)$。爲了便於描述,我給 $t$ 取了個名字,叫時間。segmentfault

假設這個空間是平直的,我拿着始終朝一個方向前進,那麼在任何一段時間 $\Delta t = t_b - t_a$ 裏,我走過的距離應該是相等的。我將這種運動稱爲勻速直線運動。工具

我開始作這個實驗,足跡幾乎踏遍了整個世界。結果讓我很吃驚,在相同的 $\Delta t$ 裏,常常性地出現走過的距離不相等的狀況。在你看來,這是個很簡單的現象,由於隨着曲線的彎曲,相同的 $\Delta t$ 對應的曲線弧長不盡相同,在曲率較大的區域,弧長會比平直區域增大不少。然而,這個現象卻足以讓我懷疑人生了。spa

若是我有大家的那個世界裏的愛因斯坦的頭腦,我必定會認爲個人空間在膨脹或收縮,時間變快了或變慢了……然而在你看來,我所謂的時間變快或變慢,只是空間彎曲給我形成的一種錯覺。blog

我一直覺得本身是勻速運動,而在你看來,我時而加速,時而減速……不然你沒法解釋,爲何我在一樣的 $\Delta t$ 裏走過的長度不相等。在我看來,這實際上是你的錯覺,是個人時間變快或變慢給你形成了個人行走過程當中存在着加速與減速。get

看來,咱們都要時不時地懷疑一下本身的人生了。it

半圓

有一種曲線,叫作圓。從理論上說,我在這樣的曲線裏行走,感覺應當與在一條直線裏行走同樣。class

不過,在我看來,這個理論是沒法成立的。若是是一個整圓,那麼我在向一個方向行走的過程,能夠經過是否可以回到起點來判斷。若是是一個半圓,那麼從理論上來講,個人確會誤認爲它是直線。然而,這種事不可能會發生,由於多項式曲線永遠沒法精確地表示圓。渲染

如今假設二維空間中有三個點 $P_0 = (-1, 0)$、$P_1 = (0, 1)$、$P_2 = (1, 0)$。顯然,這三個點位於單位圓上,確切的說是半個單位圓。假設這三個點對應的 $t$ 值分別爲 -一、0、1,那麼使用 Neville 算法對這三個點進行插值,結果獲得的不是半圓,而是弧長比半圓要小一些的二次曲線——拋物線,以下圖所示:im

因爲 POV-Ray 僅能渲染三維圖形,所以爲了繪製這條曲線,我在作曲線插值時,爲這三個點進行了升維變換,即給它們增長了一個維度,將它們變成 $P_0 = (-1, 0, 0)$、$P_1 = (0, 1, 0)$、$P_2 = (1, 0, 0)$。

你認真思考了一下爲何我會走這樣的路徑,很快你會發現,是我走的太快了。當我以恆定的「光速」在二次的曲線空間中行走時,這就是我走出來的最短路徑。怪我咯!走得太快也有錯嗎?

質量

你須要想出一種辦法來限制個人速度,讓我在某些控制點處的速度可以變得慢一些。然而,你有能力給我製造曲線空間,卻沒有能力控制個人速度。因而,你只能故伎重演,給我製造了一個新的曲線空間,讓我在這個空間裏以光的速度奔跑,而我在原曲線所在的空間裏投下的影子則時而快時而慢地歡快奔跑。

新的曲線所在的空間,其維度一定大於二維(不要忘記,上文是在二維空間裏討論曲線插值問題)。這是由於,在二維空間裏,過三個點有且僅有一條二次插值曲線,企圖不增長空間維度,而在原空間中改變個人影子的速度,是徒勞的。

從新來看上述的三個點,$P_0 = (-1, 0)$、$P_1 = (0, 1)$、$P_2 = (1, 0)$,它們到原點的距離都是 1。這是由於它們的座標要符合單位圓的定義,即 $x^2 + y^2 = 1$。然而這個定義只是描述了兩個正交的一維平直空間的關係,而未能描述這分別位於兩個空間中的點 x 與 y 的運動。要描述運動,須要時間。通過一番思索,你發現能夠像下面這樣給出單位圓定義的等價描述:

$$ \begin{aligned} x(t) & = \frac{2t}{1 + t^2} \\ y(t) & = \frac{1-t^2}{1 + t^2} \end{aligned} $$

這樣,當 $t$ 發生變化時,兩個一維點的運動軌跡,在二維空間裏便「合成」了你因此爲的半圓。

這時,你發現,這兩個一維點的運動軌跡方程的右側的分式,分母是相同的,都是 $1+t^2$。若是移走這個分母,那麼剩下的分子便造成了單項式與多項式——這是咱們都喜歡的。

移走分母的辦法很簡單,方程兩邊都乘以分母,結果就獲得了

$$ \begin{aligned} (1 + t^2)x(t) & = 2t \\ (1 + t^2)y(t) & = 1-t^2 \\ \end{aligned} $$

可是左邊綁着這麼一個東西也不是事,乾脆就把它割下來,做爲 $z(t)$,因而就獲得了

$$ \begin{aligned} x(t) & = 2t \\ y(t) & = 1-t^2 \\ z(t) & = 1 + t^2 \end{aligned} $$

你發現,這樣作不只成功地將二維點變成了三維點,並且只要將 $x(t)$ 與 $y(t)$ 分別除以 $z(t)$,就能夠從新獲得原來的 $x(t)$ 與 $y(t)$,相似於將一個三維點投影到了二維空間,並且剛好落在半圓上。

你發現,這樣作不只成功地將二維點變成了三維點,並且只要將 $x(t)$ 與 $y(t)$ 分別除以 $z(t)$,就能夠從新獲得原來的 $x(t)$ 與 $y(t)$,相似於將一個三維點投影到了二維空間,並且剛好落在半圓上。

你對我說,這樣作是否是很神奇?我無語,由於在我看來,一切都沒變,它們都是單項式或多項式曲線。你以爲這就是神奇之處,一些看上去使用多項式沒法精確表示的曲線,卻能夠在一個維度更高的空間裏造成一條多項式曲線。

你用上述手法,分別用 -一、0、1 做爲 $P_0 = (-1, 0)$、$P_1 = (0, 1)$、$P_2 = (1, 0)$ 對應的 $t$ 值,即可以將着三個點變換爲三維空間中的點,即 $P'_0 = (-2, 0, 2)$、$P'_1 = (0, 1, 1)$、$P'_2 = (2, 0, 2)$。

如今,假設你只是生活在二維空間中的生物,第三個維度對你而言,只是你想象出來的一個維度,它在你的世界裏沒有任何物理意義,也就是說,這個 $z(t)$ 的量綱與 $x(t)$ 和 $x(t)$ 毫無關係,而它又好像是你的這個世界裏一個固有屬性。因而,你給它取了個名字,叫作質量,用符號 $m$ 來表示它,又將帶質量的點稱爲質點,用 $(x, y, m)$ 來表示。

每一個維度的人都有着在更高維度空間裏的人看來很好笑的思惟侷限。

如今,你決定先不考慮質量的本質到底是什麼這個問題了,你想嘗試的是,對 $t$ 直分別爲 -一、0、1 的 $P'_0 = (-2, 0, 2)$、$P'_1 = (0, 1, 1)$、$P'_2 = (2, 0, 2)$ 使用 Neville 算法進行 2 次多項式曲線插值,結果能夠獲得

將上述曲線投影到二維空間——曲線上全部點的各維座標除以質量(第三維座標),就能夠獲得半圓:

實際上獲得的是位於 z = 1 平面上的半圓。由於 $(x, y, m)$ 的各維座標除以質量,獲得的是 $(\frac{x}{m}, \frac{y}{m}, 1)$,也就是質量爲 1 的點。

很魔性,對吧?

三個空間

想不想知道這兩條曲線的關係?看下面這張圖:

上面那條曲線,即是三維空間中的一條拋物線,下面那條曲線即是那條拋物線在 $z = 1$ 平面上的投影——半圓。最下面的那個點是原點 $O(0,0,0)$。藍色的線是投影線。這實際上即是所謂的投射投影,原點爲滅點。可是,大家的世界裏,有一些人給它起了個更使人敬畏的名字,即奇點,並認爲大家的整個宇宙是從這個點爆炸出來的,並且這個爆炸的過程還在繼續……更可怕的是,大家認爲這個點的質量無限大。

像圓、橢圓、雙曲線之類的曲線被稱爲有理曲線——不是由於它們頗有理,而是講究理性的古人發現了它們。要用多項式曲線精確表示有理曲線,咱們須要構造三個空間。多項式曲線所在的空間叫作仿射空間。有質點的那個空間叫格拉斯曼空間。有理曲線所在的空間叫射影空間。

關於這三個空間的關係,之後有時間我會再寫一篇文章。

相關文章
相關標籤/搜索