Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Расстояние от точки до прямой на плоскости, как запрограммировать? / 10 сообщений из 10, страница 1 из 1
18.08.2013, 22:53
    #38370184
I dont know
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние от точки до прямой на плоскости, как запрограммировать?
Доброго времени суток, решаю задачу нахождения расстояние от заданной точки до отрезка. Вроде бы всё понятно: есть уравнение прямой, есть координаты точки, есть формула вычисления расстояния: D = |Ax+By+C|/sqrt(A^2 + B^2). Т.е по идее мне нужно составить систему уравнений, куда подставить координаты точек начала и конца отрезка, выражать одно через другое, пока я не найду A, B, и C. На бумаге всё получается, но теперь не могу понять, как же мне все это запрограммировать, как оформить все эти вычисления(решение системы, выражение одного через другое) в виде кода. Сижу, ломаю голову и не понимаю. Можете накидать пример, чтобы я мог на нём разобраться? Хочу понять, а то может я вообще не в ту степь думаю :(
...
Рейтинг: 0 / 0
19.08.2013, 02:25
    #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
19.08.2013, 07:20
    #38370261
I dont know
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние от точки до прямой на плоскости, как запрограммировать?
mayton,

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

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

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

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

В виде координат двух точек(точка начала и точка конца отрезка)
...
Рейтинг: 0 / 0
19.08.2013, 12:47
    #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
19.08.2013, 12:48
    #38370575
Inkelyad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние от точки до прямой на плоскости, как запрограммировать?
I dont know,

Гуглим по 'аналитическая геометрия высота треугольника'
Но на глаз:
1) Находим длины сторон заданного треугольника (нам даны координаты 3-х точек)
2) По формуле Герона - площадь
3) Из площади и длины отрезка, который задает прямую - расстояние до нужной точки( последняя вершина треугольника)
...
Рейтинг: 0 / 0
19.08.2013, 12:51
    #38370584
Inkelyad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расстояние от точки до прямой на плоскости, как запрограммировать?
Туплю. Площадь сразу считается по векторному произведению. Так не нужно будет лишние корни извлекать.
...
Рейтинг: 0 / 0
19.08.2013, 13:23
    #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]