Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2010, 11:12   #1
Spark3r
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 17
Восклицание Прямые на плоскости

Найти расстояние между двумя произвольно заданными на плоскости отрезками.

Помогите пожалуйста.
Spark3r вне форума Ответить с цитированием
Старый 13.01.2010, 11:49   #2
Spark3r
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 17
По умолчанию

извени забыл написать)
в задание просто нету=(
да отрезки заданы координатами концов)
Spark3r вне форума Ответить с цитированием
Старый 13.01.2010, 12:01   #3
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Кратчайшее расстояние между двумя не пересекающимися отрезками AB и CD - минимум из расстояний от точки C до AB и от D до AB. Если же отрезки пересекаются, то, очевидно, расстояние = 0.

Кратчайшее расстояние от некоторой точки P до отрезка AB - либо минимум из |AP| и |BP|, либо |PX|, где X - проекция точки P на прямую AB, в случае если X лежит на отрезке AB.
Проекцию можно найти так: X = A + ((AP*AB) / (AB*AB)) * AB, здесь первые две * - скалярное произведение, третья - пр-ние скаляра на вектор.
Пользуемся гуглом.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 13.01.2010 в 12:06.
ROD вне форума Ответить с цитированием
Старый 13.01.2010, 12:07   #4
Spark3r
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 17
По умолчанию

Спасибо)
очень благодарен за формулу)
а ты незнаеш как записать?)
если знаеш мож помочь пожалуйста)
Spark3r вне форума Ответить с цитированием
Старый 13.01.2010, 12:11   #5
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Записать, может быть и знаю, но писать вместо вас не буду.

Если какие-то конкретные вопросы - спрашивайте, а если за вас делать - это вам дорога в раздел "Фриланс", где за вознаграждение вам сделают превосходную программу.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 13.01.2010, 12:15   #6
Spark3r
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 17
По умолчанию

Спасибо за формулу)
Spark3r вне форума Ответить с цитированием
Старый 17.01.2010, 15:29   #7
Sapfil
Пользователь
 
Аватар для Sapfil
 
Регистрация: 11.01.2010
Сообщений: 24
По умолчанию

По моему все проще... Нужно найти 4 расстояния: А-С, A-D, B-C, B-D. И выбрать из них наименьшее. Расстояние от точки до точки ищется так:
У кажной точки есть координаты Х и Y.
Для точки A - пусть будут xa и ya.
Для точки B - xb и yb, соответственно.
Чтобы найти расстояние от А до B нужно примерно вот что:

R = sqrt((pow(xa-xb),2)+(pow(ya-yb),2).

Ну а если надо не примерно, а точно - тогда присоединяюсь к ROD - либо пишите сами код (и спрашивайте уже по коду -что непонятно), либо найдите фрилансера.
Sapfil вне форума Ответить с цитированием
Старый 17.01.2010, 20:00   #8
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

задание сложнее чем может показаться.
Если отрезки не пересекаются, то расстояние между ними - это кратчайшее расстояние от одной из крайних точек одного отрезка
до какой-то точки второго отрезка. Вот нужно найти 4 таких расстояния и определить минимальное из них. Это уже сказали.
формула нахождения расстояния между точками уже приведена. Но в нашем случае известны лишь координаты одной из этих двух точек.
чтобы найти координаты второй точки, нужно еще поприседать.
Итак:
у нас есть координаты крайней точки одного отрезка (X,Y);
У нас есть координаты точек второго отрезка (X1, Y1) и (X2, Y2). Поэтому мы может задать формулу прямой, на которой лежит
данный отрезок. y = kx; где к = (Y2 - Y1) / (X2 - X1);
расстояние от точки (X,Y) до любой точки этой прямой определяется формулой:
l = кв_корень(X - x)^2 + (Y - y)^2) = кв_корень(X - x)^2 + (Y - kx)^2);
чтобы найти минимум этого l, нужно найти экстремум этой ф-ии, т.е. взять от нее производную и определить,
при каких х эта производная равна нулю. Т.е. мы найдем X' - это x-координата. Теперь смотрим, находится ли
эта координата в пределах проекции на ось x второго отрезка. если да, то Y' находим по формуле Y' = kX';
Если X' выходит за пределы отрезка (X1....X2), значит расстояние между точкой и отрезком - это расстояние
между точкой и одним из краев отрезка, координаты которых уже известны.
Вот так нужно сделать 4 раза и найти мимимум.

PS: про скалярные и векторные произведения уже ничего не помню. так что это тоже может оказаться правильным решением ))

Последний раз редактировалось _Ч_; 17.01.2010 в 20:08.
_Ч_ вне форума Ответить с цитированием
Старый 17.01.2010, 23:12   #9
Sapfil
Пользователь
 
Аватар для Sapfil
 
Регистрация: 11.01.2010
Сообщений: 24
По умолчанию

Согласен. Для упрощения понимания этого вопроса вставляю картинку с возможным вариантом.

*расстояние. Сорри за опечатку на рисунке.
Изображения
Тип файла: jpg пример.jpg (7.2 Кб, 133 просмотров)
Sapfil вне форума Ответить с цитированием
Старый 18.01.2010, 01:01   #10
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

вообще я забыл что уравнение прямой задается формулой
y = kx + b;
Вспоминаем, что означает коэффициент к - это tg(угла наклона прямой к оси х). Кротчайшее расстояние между точкой и прямой - это перпердикуляр, опушенный на прямую из точки. т.е. ее наклон будет равен 'угол' + pi/2; короче, коэфициент угла наклона зеленой прямой к прямой, на которой лежит отрезок AB будет равен -k;
т.о. у нас есть уравнение одной прямой и уравнение второй прямой:
kx + b = y - первая прямая
-kx + b' = y = вторая прямая
найти точку пересечения несложно. найти расстояние между точками тоже. Так что если осилите решение всего этого на бумажке, то и остальное тоже сможете. Если же нет, то тогда уже начинает пахнуть денежкой )
_Ч_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как нарисовать прямые strateg66 Помощь студентам 0 20.11.2009 00:01
Задача про 3 прямые meds Паскаль, Turbo Pascal, PascalABC.NET 5 17.11.2008 12:24
Написать класс - прямые на плоскости. Red Devel Помощь студентам 7 22.01.2008 15:23