一条直线平行与斜率方向平移距离d后的坐标


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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值