看到网上一堆讲原理讲得乱七八糟还抄袭的博客,把自己看懵了……转手一wiki发现写得很清晰,这里贴上来供学习。
对于直角坐标系(笛卡尔坐标系)平面的一条直线的斜截式:
y=k0x+b0
这里将
(k0,b0)看做参数空间
(k,b) 中的一点,我们知道当直线与x轴垂直时,k为无穷大,因此斜截式无法表示全部的直线。用Hesse normal form来表示直线的参数(这里是将参数的表示换了,而不是将直线从直角坐标系换到极坐标系)
所以:
k=−sinθcosθ ,
b=sinθr ,代入原斜截式方程得到方程的表达式如下:
y=−sinθcosθx+sinθr
整理可得
r=xcosθ+ysinθ,因此,给定一个点
(x0,y0),通过该点的所有直线的集合(参数是斜率和截距,这里用ρ、θ表示)表示为:
r=x0cosθ+y0sinθ=xo2+y02
(x02+y02
x0+x02+y02
y0)=x02+y02
(cosγcosθ+sinγsinθ)=x02+y02
cos(θ−γ)
因此,判断两个点是否共线的问题,在经过霍夫变换之后,变成判断通过两点的所有直线是否相交的问题。又因为通过一个点的所有直线在(r,θ)平面上代表一条曲线,画出任意两个点的两条曲线,若相交,就表示这两个点在同一条直线上。