-
Notifications
You must be signed in to change notification settings - Fork 17
/
line_intersection.py
50 lines (36 loc) · 1.16 KB
/
line_intersection.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from __future__ import division
import numpy as np
# 线生成函数
def line(p1, p2):
A = (p1[1] - p2[1])
B = (p2[0] - p1[0])
C = (p1[0]*p2[1] - p2[0]*p1[1])
return A, B, -C
# 计算两条直线之间的交点
def intersection(L1, L2):
D = L1[0] * L2[1] - L1[1] * L2[0]
Dx = L1[2] * L2[1] - L1[1] * L2[2]
Dy = L1[0] * L2[2] - L1[2] * L2[0]
if D != 0:
x = Dx / D
y = Dy / D
return x, y
else:
return False
# 计算两个平行线之间的距离
def par_line_dist(L1, L2):
A1, B1, C1 = L1
A2, B2, C2 = L2
new_A1 = 1
new_B1 = B1 / A1
new_C1 = C1 / A1
new_A2 = 1
new_B2 = B2 / A2
new_C2 = C2 / A2
dist = (np.abs(new_C1-new_C2))/(np.sqrt(new_A2*new_A2+new_B2*new_B2))
return dist
# 计算点在直线的投影位置
def point_in_line(m, n, x1, y1, x2, y2):
x = (m * (x2 - x1) * (x2 - x1) + n * (y2 - y1) * (x2 - x1) + (x1 * y2 - x2 * y1) * (y2 - y1)) / ((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
y = (m * (x2 - x1) * (y2 - y1) + n * (y2 - y1) * (y2 - y1) + (x2 * y1 - x1 * y2) * (x2 - x1)) / ((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
return (x, y)