A = np.array([1, 1])
B = np.array([7, 4])
S = np.array([4, 6])
d = B - A
v = S - A
t = np.dot(v, d) / np.dot(d, d)
H = A + t * d
dist = np.linalg.norm(S - H)
print("t =", t,"H =", H)
print("Расстояние =", dist)
print("HS перп. AB?", " да" if np.isclose(np.dot(S - H, d), 0) else " нет")
tt = np.linspace(-2, 2, 100)
line = A[:, None] + d[:, None] * tt
plt.plot(line[0], line[1], label="маршрут AB")
plt.scatter(*A, color="r"); plt.annotate("A", A + 0.5)
plt.scatter(*B, color="r"); plt.annotate("B", B + 0.1)
plt.scatter(*S, color="r"); plt.annotate("S", S + 0.1)
plt.scatter(*H, color="r"); plt.annotate("H", H + 0.1)
plt.plot([S[0], H[0]], [S[1], H[1]], color = "red")
plt.axhline(0, color = 'black')
plt.axvline(0, color = 'black')
plt.xlabel("x"); plt.ylabel("y")
plt.grid(); plt.axis("equal"); plt.legend()
plt.show()