搞了这么多理论,现在是时候展现一下矩阵的魅力了。看看经过矩阵变换后的曲线求交是何等的方便!
上篇说过,矩阵简化的效果立竿见影,如同连载二的直线椭圆相交判断一样。
按我的套路,我是会先给出传统的做法,然后再用矩阵的史诗级玩法将其击败,不过这次为了不让大家看晕,我选择把顺序调过来。
如下图,求贝塞尔曲线
和直线
的交点。
虽然这条贝塞尔曲线的基向量矩阵已经在前面给算了出来,但为了可以让大家可以更清楚地了解整个求解过程的复杂程度,我还是不厌其烦地把基向量的求解过程搬到这里。已经明白怎么求童鞋的可以一目十行地扫过去。
首先求出BD的中点C。
然后x方向的基向量等于CB
y方向的基向量等于GC的一半
接下来求出CG的中点O'
然后代入基向量矩阵。
由此可得到基向量换元公式。
接下来,我们把换元的公式代入到待求解的两条方程中。
贝塞尔曲线的是:
这一步的转换其实是很繁琐的,但是我们在连载十九和连载二十都证明了基向量矩阵换元公式用到对应的二次贝塞尔曲线后一定会成为标准的抛物线,所以这一步,无论二次贝塞尔曲线是什么数据,它的结果都一定为
接下来,我们把换元公式应用到直线上,得到
于是我们得到了基向量变换后的方程组为
这样的方程组解起来很轻松吧,直接把Y=X^2代入直线方程中就完事了。
这里为啥不用因式分解法呢?这是因为我不知道如何用程序来实现因式分解法,而我接下来要实现到代码上的。
解得
然后代入到Y=X^2中,得到
最后,我们根据这一关系式换回小写的x,y。
很简单的代入,结果为
步骤看起来还是有点多,但是每一步算起来都非常容易,并且都可以通过代码实现出来(以后我们会看到无法用代码实现的步骤),因此程序编写难度也因此而大幅下降(让后续的对比把伤害给打出来吧,哈哈)。
程序实现还是放到下一篇吧,这篇开始长了,大家还是先休息下,我们稍候再见!