欢迎光临散文网 会员登陆 & 注册

二维仿射坐标系内求过两点直线的一般式方程的最快算法(确信)

2023-03-18 19:14 作者:别再讨好比利  | 我要投稿

今天化学课我偷偷看丘维声的《解析几何》,接着之前看到的射影几何部分,突然想到这个玩意;我有点怀疑人生,因为我之前居然没想到这么算直线方程最简单......这是我最纳闷的地方,大概我确实学傻了。

省流:已知两点M(x₁,y₁),N(x₂,y₂),直线MN的方程为Ax+By+C=0

取向量(x₁,y₁,1),(x₂,y₂,1)进行叉乘,叉乘结果就是一组(A,B,C)

这样就求出直线方程了。

原理:三个向量混合积为0,则它们共面。

已知平面坐标系内的两点A(x₁,y₁),B(x₂,y₂)(仿射坐标都行),下面是求一般方程的傻瓜式操作:

首先改写两点坐标,增加第三个坐标:"1"

即A(x₁,y₁,1),B(x₂,y₂,1)

把A和B的坐标横着写两遍,并竖着对齐排列:

像这样

再去掉首列和尾列

去掉首尾

输出三组数的交叉相乘结果,写成三维坐标

蓝线相连的数相乘,减去红线相连的数相乘

让它和向量(x,y,1)点乘,输出结果即为所求

直线AB的方程如图

最后输出的结果和普通方法求的当然是一样的了,字母运算看不出什么,重要的是这样求具体直线的时候速度很快,给个示例,这坐标是我随便给的:

如果按照传统的设y=kx+b然后算的话,最后再改写成一般式,挺麻烦的。

反正我从来没那样设斜截式算过,我以前的算法是这样的:

直线的一般式方程为Ax+By+C=0,其中(A,B)就是此直线的一个法向量

那么和这个法向量模相等的方向向量就是(-B,A)和(B,-A)

在已知两点坐标的情况下,先确定方向向量并且化到最简,然后再直接得到法向量

(例:如果%5Coverrightarrow%7BMN%7D%3D(4%2C8)那么得到直线MN的最简方向向量是(1,2),法向量取用(2,-1)即可)

此时待求的只有C,直线方程写成(A,B)·(x,y)+C=0

随便找一个已知点代入到(x,y)的位置

C就求出来了。

不过我今天写的这个算法要更快一些。

现在解释原理:

三维仿射坐标系

对于xOy平面内的直线MN,和直线上一点P(x,y)

当MN和P被投影到三维坐标系的平面z=1时,记成M'(x₁,y₁,1),N'(x₂,y₂,1),P'(x,y,1)

现在考虑向量%5Coverrightarrow%7BOM'%7D%2C%5Coverrightarrow%7BON'%7D%2C%5Coverrightarrow%7BOP'%7D的混合积

因为它们是共面的,所以混合积为0

按照混合积公式有%5Cbegin%7Barray%7D%7Bc%7D%0A%5Cbegin%7Bvmatrix%7D%0A%20%20%20%20x_1%26y_1%20%20%261%20%5C%5C%0A%20%20x_2%26y_2%20%20%261%20%5C%5C%0A%20%20x%26y%20%20%261%0A%5Cend%7Bvmatrix%7D%0A%5Cend%7Barray%7D%3D0

展开之后其实就是结果。

当然这里的行列式求值把叉乘求值包括进去了,我建议是叉乘单独算,不用几秒就能算出来,而不是列个三阶行列式再展开。

二维仿射坐标系内求过两点直线的一般式方程的最快算法(确信)的评论 (共 条)

分享到微博请遵守国家法律