近期在用 OpenCV 时需要涉及到一些点与直线关系。这都是很早以前的中学知识了,无奈只好重新捡起来。
本次项目主要需要用到以下三种计算
1. 点到直线距离
2. 两条直线交点
3. 两条直线夹角
1. 点到直线距离
由于项目中得到点的坐标最容易,因此采用向量法进行所有的数学计算最清晰明了。点到直线距离就采用向量法推导。
推导过程:
代码实现:
array_longi = np.array([x2-x1, y2-y1])
array_trans = np.array([x2-line_start_x, y2-line_start_y])
# 用向量计算点到直线距离
array_temp = (float(array_trans.dot(array_longi)) / array_longi.dot(array_longi)) # 注意转成浮点数运算
array_temp = array_longi.dot(array_temp)
distance = np.sqrt((array_trans - array_temp).dot(array_trans - array_temp))
最后得到的 distance 就是点到直线距离。
2. 两条直线交点
以一般方程法解两条直线交点。
主要是参考以下两篇博客中的计算