1. 程式人生 > >【原創】《矩陣的史詩級玩法》連載二十一:用矩陣計算直線和二次貝塞爾曲線的交點

【原創】《矩陣的史詩級玩法》連載二十一:用矩陣計算直線和二次貝塞爾曲線的交點

搞了這麼多理論,現在是時候展現一下矩陣的魅力了。看看經過矩陣變換後的曲線求交是何等的方便!

上篇說過,矩陣簡化的效果立竿見影,如同連載二的直線橢圓相交判斷一樣。

按我的套路,我是會先給出傳統的做法,然後再用矩陣的史詩級玩法將其擊敗,不過這次為了不讓大家看暈,我選擇把順序調過來。

如下圖,求貝塞爾曲線

和直線

的交點。

雖然這條貝塞爾曲線的基向量矩陣已經在前面給算了出來,但為了可以讓大家可以更清楚地瞭解整個求解過程的複雜程度,我還是不厭其煩地把基向量的求解過程搬到這裡。已經明白怎麼求童鞋的可以一目十行地掃過去。

首先求出BD的中點C。

然後x方向的基向量等於CB

y方向的基向量等於GC的一半

接下來求出CG的中點O'

然後代入基向量矩陣。

由此可得到基向量換元公式。

接下來,我們把換元的公式代入到待求解的兩條方程中。

貝塞爾曲線的是:

這一步的轉換其實是很繁瑣的,但是我們在連載十九和連載二十都證明了基向量矩陣換元公式用到對應的二次貝塞爾曲線後一定會成為標準的拋物線,所以這一步,無論二次貝塞爾曲線是什麼資料,它的結果都一定為

接下來,我們把換元公式應用到直線上,得到

於是我們得到了基向量變換後的方程組為

這樣的方程組解起來很輕鬆吧,直接把Y=X^2代入直線方程中就完事了。

這裡為啥不用因式分解法呢?這是因為我不知道如何用程式來實現因式分解法,而我接下來要實現到程式碼上的。

解得

然後代入到Y=X^2中,得到

最後,我們根據這一關係式換回小寫的x,y。

很簡單的代入,結果為

步驟看起來還是有點多,但是每一步算起來都非常容易,並且都可以通過程式碼實現出來(以後我們會看到無法用程式碼實現的步驟),因此程式編寫難度也因此而大幅下降(讓後續的對比把傷害給打出來吧,哈哈)。

程式實現還是放到下一篇吧,這篇開始長了,大家還是先休息下,我們稍候再見!