Вычисление кратчайшего расстояния от точки до прямой, заданной уравнением ax + by + c = 0
with open('distance1.in', 'r') as fin:
x, y, a, b, c = map(int, fin.readline().split())
z = abs(a * x + b * y + c) / (a**2 + b**2)**0.5
with open('distance1.out', 'w') as fout:
fout.write(str(z))
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream fin("distance1.in");
ofstream fout("distance1.out");
int x, y, a, b, c;
fin >> x >> y >> a >> b >> c;
double dist = abs(a * x + b * y + c) / sqrt(a * a + b * b);
fout << dist << endl;
return 0;
}
Расстояние от точки (x₀, y₀) до прямой, заданной уравнением ax + by + c = 0, вычисляется по формуле:
Числитель — это абсолютное значение подстановки координат точки в уравнение прямой. Знаменатель — длина нормального вектора (a, b). Результат — длина перпендикуляра, опущенного из точки на прямую.
Если d = 0, то точка лежит на прямой.
Точка: (1, 2)
Прямая: 3x + 4y - 10 = 0
d = |3·1 + 4·2 - 10| / √(3² + 4²) = |3 + 8 - 10| / 5 = |1| / 5 = 0.2
Ввод: файл distance1.in содержит числа x y a b c
Вывод: файл distance1.out содержит расстояние