import matplotlib.pyplot as plt
import math as math
import numpy as np
##只能输入一条直线==两个点坐标,得到直线方程 y=kx+b
def Equation(A, B): # points list 坐标[x,y]
if B[0] - A[0] == 0:
raise ('数据错误!points:', points)
res = [0, 0]
#计算直线方程K:=y1-y0/x1-x0
res[0] = ((B[1] - A[1]) / (B[0] - A[0]))
# 计算直线方程B:=(X1*Y0-X0*Y1)/X1-X0
res[1] = ((B[0] * A[1] - A[0] * B[1]) / (B[0] - A[0]))
return res
A=[0, 1]
B=[2, 2]
points = [[0, 1], [2, 2]]
fig = plt.figure('result')
plt.plot([A[0], B[0]], [A[1], B[1]], 'rx')
# 'g-'表示绿色实线绘制
plt.plot([A[0], B[0]], [A[1], B[1]], 'g-')
#作用根据两个点是的坐标计算直线的斜率和截距
temp_l = Equation(A, B)
#根据直线的斜率和截距计算A点移动b后的坐标
# 从传入的直线的坐标方程取出斜率和截距
k = temp_l[0] * 1.0
b = temp_l[1] * 1.0
# 从传入的点的坐标取出点的坐标
xa = A[0] * 1.0
ya = A[1] * 1.0
xb = B[0] * 1.0
yb = B[1] * 1.0
#一个坐标点应该存在两个对称的点
d=1
A1X = (math.sqrt(k * k + 1) * d + ya + xa / k - b) / (k + 1 / k)
A1Y = (xa - A1X) / k + ya
k_new1 = (k * 1.0)
b_new1= A1Y - k * A1X
A2X = (ya + xa / k - b - math.sqrt(k * k + 1) * d) / (k + 1 / k)
A2Y = (xa - A2X) / k + ya
k_new2 = (k * 1.0)
b_new2= A2Y - k * A2X
B1X = (math.sqrt(k * k + 1) * d + yb + xb / k - b) / (k + 1 / k)
B1Y = (xb - B1X) / k + yb
kB_new1 = (k * 1.0)
bB_new1= B1Y - k * B1X
B2X = (yb + xb/ k - b - math.sqrt(k * k + 1) * d) / (k + 1 / k)
B2Y = (xb - B2X) / k + yb
kB_new2 = (k * 1.0)
bB_new2= B2Y - k * B2X
plt.plot([A1X, A2X], [A1Y, A2Y], 'r.') # 平移后直线起始端点
plt.plot([B1X, B2X], [B1Y, B2Y], 'r.') # 平移后直线起始端点
plt.pause(66660000)
plt.draw()