弹指一挥间,连载到了三十篇。能坚持看下来的,估计都是铁粉了。
两个椭圆求交,一个变成单位圆,另一个则一定要做矩阵变形。
根据连载二十八,这两条椭圆方程可表示如下。
如果把其中一条(比如第1条)化为标准圆,那么第二条就要对X,Y执行一个如下的矩阵变换(一路看过来的朋友相信这个套路你们都不会陌生了吧)。
然后把这个式子代入到第2条方程里面,天哪,那可不是一般的复杂。
在连载二十八里,我提到一点:所以如果知道变换的具体参数,那是不会考虑直接拿这个方程来求解的。
所以我们来观察一下整个的变换过程。
为了把上图的蓝色圆变成单位圆,我们可以这样变形。
然后在这个过程中,红椭圆就要执行上述的那个蛋疼的方程代入。
但我们知道,红椭圆自身也可以用单位圆+变换矩阵来表示。所以可以对其进行如下分解。
这个变换里面,蓝椭圆我们完全不用关心,因为蓝椭圆的最终结果确定为单位圆。
连在一起,就是
分解成了这样两步,如果仍然一步步地去跟矩阵相乘,那就跟前面的做法没有任何区别。但是,这个矩阵的连乘过程,大家能想到什么?没错!我们可以先通过结合律先把矩阵乘好,然后再应用到单位圆上!
矩阵连乘手算不比方程矩阵变换轻松多少,不过放到我们的矩阵类里面,那前者就显然优于后者了!
我们来重温这个简化过程:
原始状态:一个复杂矩阵m1*非常复杂的斜椭圆=很难求出的一个结果
简化状态:一个复杂矩阵m1*一个复杂矩阵m2*一个单位圆*=(一个复杂矩阵m1*一个复杂矩阵m2)*一个单位圆=一个矩阵*一个单位圆=很容易求出的一个结果
就这样,我们通过一个史诗级的变换把最复杂的部分转移到了矩阵乘法中,而这一步交由矩阵类即可轻松完成!
如果你们也有同样的感受,那相信会跟我一样,都迫不及待地想通过代码来验证下了。好,事不宜迟,我们把两条方程列出来。一条是单位圆,另一条是加入矩阵的单位圆。
这地方代入稍麻烦,需要带着根号。当然你们也可以尝试用三角函数代替。
所幸的是,这个基于单位圆的根式,已经比前面我们碰到的简单很多很多了,因此展开去根号也很简单。
废话少说,马上在下一篇给出代码!