|
|
|
Расстояние от точки до прямой на плоскости, как запрограммировать?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток, решаю задачу нахождения расстояние от заданной точки до отрезка. Вроде бы всё понятно: есть уравнение прямой, есть координаты точки, есть формула вычисления расстояния: D = |Ax+By+C|/sqrt(A^2 + B^2). Т.е по идее мне нужно составить систему уравнений, куда подставить координаты точек начала и конца отрезка, выражать одно через другое, пока я не найду A, B, и C. На бумаге всё получается, но теперь не могу понять, как же мне все это запрограммировать, как оформить все эти вычисления(решение системы, выражение одного через другое) в виде кода. Сижу, ломаю голову и не понимаю. Можете накидать пример, чтобы я мог на нём разобраться? Хочу понять, а то может я вообще не в ту степь думаю :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2013, 22:53 |
|
||
|
Расстояние от точки до прямой на плоскости, как запрограммировать?
|
|||
|---|---|---|---|
|
#18+
Ты не можешь начать потому-что не определился как заданы исходные данные и каковы на них ограничения. Предполагаю что у тебя всё-таки решение на плоскости а не в пространстве т.к. формулу ты написал без орты 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) и это будет ответ. Верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2013, 02:25 |
|
||
|
Расстояние от точки до прямой на плоскости, как запрограммировать?
|
|||
|---|---|---|---|
|
#18+
mayton, Да, у меня отрезок на плоскости. Вечером, как приду домой, попробую поработать с тем что вы написали, спасибо ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2013, 07:20 |
|
||
|
Расстояние от точки до прямой на плоскости, как запрограммировать?
|
|||
|---|---|---|---|
|
#18+
mayton, Можно ещё такой вопросик, по ссылке(Решаем их по формуле http://e-maxx.ru/algo/lines_intersection) есть пример реализации, там линия задаётся тремя числами(a, b, и с). И дальше все вычисления уже идут с их помощью. Что это за числа? Я так понимаю, это коэффициенты из уранвнения: Ax + By + C = 0. Как он их получает, откуда они возьмутся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2013, 12:07 |
|
||
|
Расстояние от точки до прямой на плоскости, как запрограммировать?
|
|||
|---|---|---|---|
|
#18+
I dont knowmayton, Ax + By + C = 0, Как он их получает, откуда они возьмутся? В каком виде-то исходные данные о прямой даны? y=a*x+b, если со школы не забыл, есть в точности то же самое, что a*x +(-1)*y +b = 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2013, 12:23 |
|
||
|
Расстояние от точки до прямой на плоскости, как запрограммировать?
|
|||
|---|---|---|---|
|
#18+
Inkelyad, В виде координат двух точек(точка начала и точка конца отрезка) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2013, 12:33 |
|
||
|
Расстояние от точки до прямой на плоскости, как запрограммировать?
|
|||
|---|---|---|---|
|
#18+
Если смотреть в виде кода, то у меня все это задано так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2013, 12:47 |
|
||
|
Расстояние от точки до прямой на плоскости, как запрограммировать?
|
|||
|---|---|---|---|
|
#18+
I dont know, Гуглим по 'аналитическая геометрия высота треугольника' Но на глаз: 1) Находим длины сторон заданного треугольника (нам даны координаты 3-х точек) 2) По формуле Герона - площадь 3) Из площади и длины отрезка, который задает прямую - расстояние до нужной точки( последняя вершина треугольника) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2013, 12:48 |
|
||
|
Расстояние от точки до прямой на плоскости, как запрограммировать?
|
|||
|---|---|---|---|
|
#18+
Туплю. Площадь сразу считается по векторному произведению. Так не нужно будет лишние корни извлекать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2013, 12:51 |
|
||
|
Расстояние от точки до прямой на плоскости, как запрограммировать?
|
|||
|---|---|---|---|
|
#18+
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. Поэтому предпочтительнее векторный вид. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2013, 13:23 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38370184&tid=1341700]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
548ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 907ms |

| 0 / 0 |
