Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
#1

Найти расстояние между отрезками - C++

10.02.2014, 20:28. Просмотров 2735. Ответов 20
Метки нет (Все метки)

Даны координаты точек двух отрезков, найти расстояние между ними.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2014, 20:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти расстояние между отрезками (C++):

Расстояние между двумя произвольно заданными на плоскости отрезками - C++
Ребят, подскажите как найти расстояние между двумя произвольно заданными на плоскости отрезками (данную задачу мне нужно написать в С,...

Расстояние между двумя множествами точек - это расстояние между наиболее близко расположенными точками этих - C++
1. Расстояние между двумя множествами точек - это расстояние между наиболее близко расположенными точками этих множеств. Найти расстояние...

Задача на рекурсию. Найти кратчайшее расстояние между городами i и j даже если между ними нет прямой дороги - C++
Дана матрица размером NxN с расстояниями между городами при наличии прямой дороги между ними. По вертикали содержаться города откуда...

Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили пе - C++
Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если...

Найти расстояние между символами с1 и с2 - C++
я смог сделать только что бы подсчитывались все символы в строке, то есть общее количество #include <iostream> #include <conio.h> ...

Найти наибольшее расстояние между точками - C++
#include <cstdlib> #include <iostream> #include <Math.h> using namespace std; double rast(double x1, double x2, double y1,...

20
AndrSlav
44 / 44 / 6
Регистрация: 20.12.2013
Сообщений: 267
10.02.2014, 23:40 #16
Цитата Сообщение от Байт Посмотреть сообщение
Даже не прочтя определения
Ну, тык, мануал читается, если ничего не работает Для простых людей лучше писать прямо Функции. Найти расстояние между двумя заданными множествами точек на плоскости
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.02.2014, 23:42 #17
Цитата Сообщение от Байт Посмотреть сообщение
Это круто! Вы бы хоть в свободную минуту посмотрели б, что такое расстояние Гугль, да и прочие поисковые системы, да и простой здравый смысл - в помощь.
Ну смотрите, расстояние от меня до центра Земли допустим 6000 кМ. Если я буду мерить это расстояние не от центра Земли, а от центра Солнца, то этот отрезок тоже можно обозвать расстоянием от меня до центра Земли, но он будет значительно отличаться от отрезка измеренного из центра Земли до меня. Поэтому никакого конкретного расстояния найти нельзя если заблаговременно не определить откуда до куда мерить.
0
virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
11.02.2014, 08:13  [ТС] #18
В моей задаче найти расстояние, означает найти наименьшее расстояние между этими отрезками, как правильно было выше сказано, нужно найти точку на каждой прямой, и чтобы расстояние между ними было наименьшее, проблема заключается в самом алгоритме, я не знаю как решать ибо слишком много случаев вырисовывается
0
Байт
Эксперт C
16549 / 10819 / 1640
Регистрация: 24.12.2010
Сообщений: 20,888
11.02.2014, 11:02 #19
virtuos553, обратите внимание на пост #8. Там я допустил ошибку (описку), поэтому повторю.
Цитата Сообщение от Байт Посмотреть сообщение
Точки отрезка АВ задаются уравнением E = tA+(1-t)B (0<=t<=1), A,B - вектора, те. это 3 уравнения, надеюсь, понятно?
Соответственно F = sC + (1-s)D
|EF| = http://www.cyberforum.ru/cgi-bin/latex.cgi?\sqrt{{(tAx+(1-t)Bx-sCx-(1-s)Dx)}^{2} + {(tAy+(1-t)By-sCy-(1-s)Dy)}^{2} + {(tAx+(1-t)Bz-sCz-(1-s)Dz)}^{2}}
У этой функции от 2-х переменных надо найти минимум в квадрате 0<=t<=1, 0<=s<=1
Корень можно убрать.
Далее ищите экстремумы внутри квадрата, на границах, в вершинах. Берете самый маленький. Это будет ОН.
Занудливо, но ничего страшного по сути.
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
11.02.2014, 13:06 #20
virtuos553, в чем тогда проблема? Все очень просто, находите расстояния между точками.
C++
  struct P
  {
    float x, y;
  };
 
  P a, b; // отрезок АB
  a.x = 3.0; a.y = 4.0;
  b.x = 8.0; b.y = 1.0;
  P c, d; // отрезок CD
  c.x = 5.0; c.y = 7.0;
  d.x = 9.0; d.y = 5.0;
  
  // расстояние от точки A до точки C
  float distance = pow( pow(a.x-c.x,2)+pow(a.y-c.y,2) , 0.5 );
 
  // и так далее находите расстояния между всеми
  // нужными точками
  // самое малое расстояние будет ответом
0
Байт
Эксперт C
16549 / 10819 / 1640
Регистрация: 24.12.2010
Сообщений: 20,888
11.02.2014, 16:42 #21
Цитата Сообщение от programina Посмотреть сообщение
Все очень просто
Цитата Сообщение от virtuos553 Посмотреть сообщение
нужно найти точку на каждой прямой, и чтобы расстояние между ними было наименьшее
И совершенно очевидно, что эти точки вовсе не обязательно должны быть концевыми точками отрезков (хотя и могут ими быть).
Кстати, ТС тут допустил небольшую неточность. Видимо, следует читать "на каждом отрезке" Если б на прямой, то разговор был бы значительно проще.

Добавлено через 13 минут
Цитата Сообщение от Байт Посмотреть сообщение
разговор был бы значительно проще.
Вот 2 решения (для прямых).
1. Ищем экстремум указанной выше функции, но без ограничений 0<=t<=1 0<=s<=1. Такой экстремум один (не считая вырожденного случая параллельных прямых) - там всего-то 2 линейных уравнения df/dt = 0, df/ds = 0
2. Геометрический. Находим вектор N, перпендикулярный обоим прямым (векторное произведение AB x CD)
Строим плоскость P через т.А с нормалью N. Эта плоскость будет параллельна отрезку CD. Расстояние от точки С до плоскости Р и будет искомое.
Но, к сожалению, это не совсем то, что нужно ТС.
0
11.02.2014, 16:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2014, 16:42
Привет! Вот еще темы с ответами:

Найти наибольшее расстояние между точками - C++
Здравствуйте. Пользователь задает координаты нескольких точек, программа должна определить, между какими точками наибольшее расстояние....

Найти расстояние между отрезком AB и прямой - C++
помогите написать, знаю как это в теории сделать, но не знаю как на си... Найти расстояние между произвольно заданными на плоскости...

Найти максимальное расстояние между точками на плоскости - C++
Даны координаты n точек на плоскости: (X1, Y1), ..., (Xn, Yn) (n ≤ 30). Найти номер пары точек, расстояние между которыми самое большое...

Найти расстояние между городами на Земле по координатам - C++
на днях дали задание написать программу, которая высчитывает расстояние между городами по координатам. Я пытался ее сделать через формулы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru