【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题

时间:2023-02-10 18:48:35

        这标题如果写在考试的作文里,那老师一定会给我评0分,因为矩阵和图形的几何特性看起来并不存在任何关系,在大多数老师眼里这绝逼是一篇文不对题的作文,已经没有细看下去的意义了。类似的事情还真试过发生在我身上,初中的一篇作文本来有个老师给我评了57分(满分60),结果年级主任不服,给我降到了41分,原因跟该文章的标题有异曲同工之妙。懂我的人能看出来其中的奥秘,不懂的就是对牛弹琴了。没错,年级主任就像头牛一样牛逼哄哄的,咱们谁都不敢惹她。


        有人曾给过我建议,说让我好好把自己包装一下,程序员一定要懂得推销自己。然而像这种理论的东西,哪怕再基础都很难包装,一旦为迎合市场而包装,其内容就一定要变味,就更不用说这种偏于玄乎的知识了。当然了,也可以先在其他方面吸粉然后再引导粉丝向着自己的方向走,但这也是不可能的。如果他们本身对这种东西不感兴趣的话,那粉丝再多也只是关注你的其他方面而非这些对他们来讲枯涩难懂的数学算法。就好比一个拜金女,她喜欢的永远都是你的钱,而不是你的人。


        千金易得,知己难求,牢骚发完了,我要开始在这里寻求懂我的人。


        在接触解析几何之前,研究几何问题一般都通过图形自身的几何特性,比如用全等三角形,面积法构建等量关系,相似三角形构建比例关系等等。而解析几何则把这些技巧性的东西用坐标系给统一起来了,所有的事情都基于坐标计算。为此,很多基础几何无法解决的问题都有了一个固定的套路。甚至有人说,学完解析几何以后,以前小学初中几何神马的都是浮云了。


        然而物极必反,此时难免想返璞归真。举个简单的例子,要判断两个圆是否相交,解析几何的做法就是把两个圆的方程联立起来(组成方程组),然后判断是否有解。而基础几何则只需要判断圆心的距离是否介于两圆的半径之差和两圆的半径之和之间即可,运算量可以简化不少。演算过程这里先不给出,反正后面有地方会让大家体会得到。


        另一个例子则是判断直线和圆是否相交,解析几何同样是蛋疼的解方程,而基础几何则简单粗暴,直接判断圆心到直线的距离,小于半径为相交,等于半径为相切,大于半径为相离(图中蓝线均代表半径)。
【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题

        但是数学老师们却讨厌的狠,教了椭圆之后,就特喜欢拿直线和椭圆相交来给学生出题目。再变态点的就是出在选择题上,让你算个10分钟了才拿到几分,效果可能还不如画图观察,或者直接蒙一个答案。


        跟圆相比,椭圆少了很多重要的几何特性,比如圆心到图形上任意点的距离相等,相切时切点所在的半径和切线垂直,等等,这导致判断相交没有办法用基础几何的技巧来完成了。


        如下图,圆心到x=1.5和y=1.5这两条直线的距离都是1.5,但一个相交一个相离。
【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题
        因此教科书上给出的方法是直接两方程联立求解,其蛋疼程度可见一斑。
         【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题

        以上图为例,解析几何的套路不用思考,很简单,直接联立求解。


        为了更方便地体现联立求解的蛋疼程度,我把椭圆的圆心从坐标原点偏移到了(-0.5, 0.5)


        如果直线方程你只认y=kx+b这种形式的话,那你化一下,变成kx-y+b=0即可。不用太纠结,对于此问题来说,这只是形式上的差异而已。


        一次和二次联立,一般做法是把一次方程中的其中一个变量化为用另一个变量表达的形式,然后代入到二次方程中,具体如下:
【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题
        这系数很让人抓狂,有木有?!然后判断是否相交吧,可以用二次方程的判别式b²-4ac来实现。具体如下:
【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题

        计算过程倒是没什么难度,就是超级繁琐,我写着写着都晕了,没准这中间还有错误没发现。但是椭圆给人的感觉跟圆还是很相似的啊,有没办法利用圆的特性来简化呢?


        在我讲课的时候,我把这个作为问题留给了同事思考,其中一个同事给出了一个方法,就是过圆心作直线的垂线看是先跟直线相交还是先跟椭圆相交。
  【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题
        嗯,没错,这个方法要是行得通了,确实能简化一些,虽然仍然有解方程的步骤在里面。但很遗憾,这个方法很容易就举到反例了,请看下图。
【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题

        垂线先到达的是椭圆,然后才是直线,按照那位同事的方法,结果是相离,但正确的答案却是相交。


        程序里有个词汇叫意淫开发,所以垂线的思想在那位同事的意淫世界里其实是这个样子的。
         【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题
        也就是垂到一个离直线较近,但是离椭圆较远的一个位置,类似于拱形底部的中心。
        立体几何还学得可以的朋友可能会感觉到上图的垂线有个透视的味道,嗯,没错!脑补一下,可以补成下图这样。
【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题

          卧槽,这不就是个圆柱么?我把它当成圆那该多好!就差个透视角度的改变了。然而透视角度谈何容易!


          好消息是,我们中学立体几何的画图方法是平行透视,变换起来很简单,对于椭圆来说,把长轴半径或者短轴半径拉一下,就可以拉成圆了。比如前面提到的椭圆,长轴为2,短轴为1,我们把图形的y坐标全部放大到原来的两倍即可。
拉伸前:
【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题
拉伸后:
【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题
        这里需要注意的是,缩放并非以圆心为基准点缩放,所以所有的y坐标都要放大到原来的2倍,包括圆心的y坐标。

        然后剩下的就是判断(-0.5,1)这个点到被拉伸的直线的距离是否小于半径2了。


     原始方程为4x-6y+9=0,要让y放大两倍,其做法可以是先解出y,得到y=2/3*x+3/2,然后新的纵坐标Y=2y=2(2/3*x+3/2)=4/3*x+3

        接着化回一般式


        Y=4/3*x+3
        3Y=4x+9

        4x-3Y+9=0


        这个变换过程还是繁琐了,解出y乘以2再化回去,实际上这个过程完全没必要,因为这当中只要找到Y和y的关系即可直接代入。在上面加了删除线的式子中,最关键的式子是Y=2y,然后为了代入原始方程4x-6y+9=0,我们把前面的y算出来,得到y=Y/2,因此有


        4x-6(Y/2)+9=0

        4x-3Y+9=0


        简单很多了吧,然后代入点到直线的距离公式(这个公式不知道的话可以自行百度)
【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题

        距离小于半径,因此原始的椭圆和直线相交。


        跟直接消元判断方程的解相比,直接拉伸一下是不是简单了很多呢?


        如果你理解了这种做法,那恭喜你,你已经完全学会了矩阵的一个应用了!缩放就是常用矩阵变换的一种


        椭圆就跟这个被打小人的头一样,只是被打变形了,锤子拿掉就能恢复原样。


【原创】《矩阵的史诗级玩法》连载二:利用图形的几何特性简化问题


        是不是还没回过神来?这跟矩阵有个毛线关系啊?!没错,这就是一种史诗级的玩法,如同遁地术一般,若即若离,似有若无,不留痕迹,杀人于无形之中,让你死无对证,问你服了没!


        大概有的人觉得这是高考前才有用的东西,如果你也是这么想的话,那就请把这种技巧传授给你的下一代,让他们少踩点坑。但我更希望的是以后我们的字典里都别再有高考这个名词了。


         好了,今天有点累了,看什么时候继续写下一篇,敬请期待!


        但我感觉,这个套路放出来之后,后续的东西基本就等于剧透完了。