powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Расстояние от точки до прямой на плоскости, как запрограммировать?
10 сообщений из 10, страница 1 из 1
Расстояние от точки до прямой на плоскости, как запрограммировать?
    #38370184
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток, решаю задачу нахождения расстояние от заданной точки до отрезка. Вроде бы всё понятно: есть уравнение прямой, есть координаты точки, есть формула вычисления расстояния: D = |Ax+By+C|/sqrt(A^2 + B^2). Т.е по идее мне нужно составить систему уравнений, куда подставить координаты точек начала и конца отрезка, выражать одно через другое, пока я не найду A, B, и C. На бумаге всё получается, но теперь не могу понять, как же мне все это запрограммировать, как оформить все эти вычисления(решение системы, выражение одного через другое) в виде кода. Сижу, ломаю голову и не понимаю. Можете накидать пример, чтобы я мог на нём разобраться? Хочу понять, а то может я вообще не в ту степь думаю :(
...
Рейтинг: 0 / 0
Расстояние от точки до прямой на плоскости, как запрограммировать?
    #38370233
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты не можешь начать потому-что не определился как заданы исходные данные
и каковы на них ограничения.

Предполагаю что у тебя всё-таки решение на плоскости а не в пространстве т.к. формулу ты написал без орты Z.

В таком случае точка задана координатами (x0,y0).
Прямая задана в векторном виде (она имеет начало вектора (x1,y1) и конец (x2,y2)).

(есть и другие способы задания прямой. Например общее : 0 = Ax + By + C или
задание через длину перпендикуляра от прямой к центру коодинат и угол Тета
между OX и етим перпендикуляром.)


Я не помню формулу которая решает твою задачу но могу ее вывести. Расстояние меряется
теоремой Пифагора. Для этого нужно из точки опустить перпендикуляр на прямую.
Перпендикуляр мы сделаем так. Это вектор начало которого лежит в точке (x0,y0)
а нос его смотрит в любую сторону +-90 градусов относительно вектора прямой. Чтобы сгенерить
перпендикулярный вектор нужно его умножить на матрицу Rotate(90градусов). Я опущу
вывод матрицы. У нее в коэффициентах стоят либо нули либо +1 либо -1. Там суть
синусы и косинусы 90 градусов.

Результатом умножения вектора прямой (x3,y3) = (x2-x1,y2-y1) будет
новый вектор у которого координаты носа поменялись местами и один из координатов
сменил знак с плюса на минус.

Например (x3,y3) * Rotate(90) = (y3,-x3) или (-y3,x3) нам всё равно в данном случае.
Обозначим ответ как (x5,y5) чтоб не было путаницы

Далее у нас есть две прямые (x1,y1),(x2,y2) и (x0,y0),(x0+x5,y0+y5)

Решаем их по формуле http://e-maxx.ru/algo/lines_intersection
Это формула-боян. Ее знают все кто учит геометрию на плоскости.
Она правда задана в общем виде. Переход от векторного вида прямой
к общему и наоборот выведешь сам.

Решаем эту формулу-бойан и получаем точку (x6,y6).

Далее по Пифагору ищем sqrt((x0-x6)^2+(y0-y6)^2) и это будет ответ.

Верно?
...
Рейтинг: 0 / 0
Расстояние от точки до прямой на плоскости, как запрограммировать?
    #38370261
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Да, у меня отрезок на плоскости. Вечером, как приду домой, попробую поработать с тем что вы написали, спасибо )
...
Рейтинг: 0 / 0
Расстояние от точки до прямой на плоскости, как запрограммировать?
    #38370490
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Можно ещё такой вопросик, по ссылке(Решаем их по формуле http://e-maxx.ru/algo/lines_intersection) есть пример реализации, там линия задаётся тремя числами(a, b, и с). И дальше все вычисления уже идут с их помощью. Что это за числа? Я так понимаю, это коэффициенты из уранвнения: Ax + By + C = 0. Как он их получает, откуда они возьмутся?
...
Рейтинг: 0 / 0
Расстояние от точки до прямой на плоскости, как запрограммировать?
    #38370518
Inkelyad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
I dont knowmayton,
Ax + By + C = 0, Как он их получает, откуда они возьмутся?

В каком виде-то исходные данные о прямой даны?

y=a*x+b, если со школы не забыл, есть в точности то же самое, что a*x +(-1)*y +b = 0
...
Рейтинг: 0 / 0
Расстояние от точки до прямой на плоскости, как запрограммировать?
    #38370537
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Inkelyad,

В виде координат двух точек(точка начала и точка конца отрезка)
...
Рейтинг: 0 / 0
Расстояние от точки до прямой на плоскости, как запрограммировать?
    #38370571
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если смотреть в виде кода, то у меня все это задано так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
class Point {
    double x;
    double y;
    
    /* расстояние от точки до линии */
    double Distance(Line& line) {
        return 0.0;
   }
};


class Line {
    Point mBegin;
    Point mEnd;

    bool HitTest(Point& p);
    bool IsParallel(Line& line);
    Point CrossTest(Line& line);

};
...
Рейтинг: 0 / 0
Расстояние от точки до прямой на плоскости, как запрограммировать?
    #38370575
Inkelyad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
I dont know,

Гуглим по 'аналитическая геометрия высота треугольника'
Но на глаз:
1) Находим длины сторон заданного треугольника (нам даны координаты 3-х точек)
2) По формуле Герона - площадь
3) Из площади и длины отрезка, который задает прямую - расстояние до нужной точки( последняя вершина треугольника)
...
Рейтинг: 0 / 0
Расстояние от точки до прямой на плоскости, как запрограммировать?
    #38370584
Inkelyad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Туплю. Площадь сразу считается по векторному произведению. Так не нужно будет лишние корни извлекать.
...
Рейтинг: 0 / 0
Расстояние от точки до прямой на плоскости, как запрограммировать?
    #38370624
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I dont knowmayton,

Можно ещё такой вопросик, по ссылке(Решаем их по формуле http://e-maxx.ru/algo/lines_intersection) есть пример реализации, там линия задаётся тремя числами(a, b, и с). И дальше все вычисления уже идут с их помощью. Что это за числа? Я так понимаю, это коэффициенты из уранвнения: Ax + By + C = 0. Как он их получает, откуда они возьмутся?

Есть формулы перехода от A,B,C,0 к (x0,y0),(x1,y1). Они не сложные. Если ты часик посидишь
с карандашом и бумагой ты их выведешь. И обратный переход само-собой тоже существует.

Прямую также можно задать через уравнение вида y = kx + b но это неудачный кейс т.к. это не позволяет
задать прямые параллельные оси OY. Поэтому предпочтительнее векторный вид.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Расстояние от точки до прямой на плоскости, как запрограммировать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]