Задача про ПЕРЕСЕЧЕНИЕ ОТРЕЗКОВ, НЕ могу решить...нет идей...помогите плз |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Задача про ПЕРЕСЕЧЕНИЕ ОТРЕЗКОВ, НЕ могу решить...нет идей...помогите плз |
B |
Сообщение
#1
|
Гость |
Дано: Два отрезка на плоскости заданы координатами своих концов.
Определить имеют ли ети отрезки общие, НЕ НАХОДЯ ТОЧКУ ПЕРЕСЕЧЕНИЯ (погрешностями пренебречь) буду очень благодарен, если поможете заранее спасибо |
klem4 |
Сообщение
#2
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Отрезки имеют общие точки, если он НЕ параллельны, тоесть имеют разный угол наклона k к оси ОХ.
Получай уравнения прямых по точкам, а из них уже получай угловые коэфф-ты и сравнивай их. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
B |
Сообщение
#3
|
Гость |
ты немного не понял klem4
это НЕ неограниченные прямые, а отрезки, которые могут располгаться в разных, координатных осях так что тема с коэфициентом непрокатит ( |
В |
Сообщение
#4
|
Гость |
вот пример того как два отрезка параллельны и не пересекаются
Эскизы прикрепленных изображений |
TarasBer |
Сообщение
#5
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Программу за вас писать не буду.
Зная 2 точки на отрезке, нетрудно написать уравнение прямой, содержащей его, в виде Ax+By+C=0 (если отрезок-точка, то получаем уравнение 0=0). В формуле что-то типа A=y1-y2, B=x2-x1, C=x1*y2-x2*y1. После этого в левую часть подставляете концы другого отрезка (получив 2 числа). Если получился одинаковый знак, то отрезки не пересекаются. Если знаки разные - то значит отрезок 2 пересекает прямую, содержащую отрезок 1. Если один из знаков нулевой - то тоже. Если оба знака нулевые - то это отдельный случай, когда оба отрезка расположены на одной прямой. Потом аналогично делается для другого отрезка. Исходя из полученных ответов определить, пересекаются ли отрезки можно во всех случаях, кроме одного: когда отрезки на одной прямой. В последнем случае надо спроецировать отрезки на ось икс ,если отрезки не параллельны оси игрик, или на ось игрик в противном случае (отбросить одну из координат). После этого уже всё что надо легко узнаётся. -------------------- |
В |
Сообщение
#6
|
Гость |
Большое спасибо, за ответ !
Только я не совсем понял : Цитата Если получился одинаковый знак одинаковый знак чего ? з.ы. мож, я тупой какой, таких вещей не понимаю ? ) |
klem4 |
Сообщение
#7
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Цитата вот пример того как два отрезка параллельны и не пересекаются И что по твоему у этих отрезков разный угол наклона к оси ОХ ? -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
В |
Сообщение
#8
|
Гость |
пусть углы одинаковые, но ведь отрезки не имеют общих точек, не так ли ?
|
klem4 |
Сообщение
#9
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Цитата не так ли Именно так, если углы наклона прямых одинаковые, значит они не пересекаются, следовательно не имеют общих точек, я не могу понять в чем проблема ? -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
TarasBer |
Сообщение
#10
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Большое спасибо, за ответ ! Только я не совсем понял : одинаковый знак чего ? з.ы. мож, я тупой какой, таких вещей не понимаю ? ) В выражение Ax+By+C мы подставили икс и игрик для одного конца отрезка - получили одно число, подставили второй конец - получили второе число. Так вот если у этих двух чисел одинаковый знак (типа оба больше нуля или оба меньше нуля) то см. далее. -------------------- |
В |
Сообщение
#11
|
Гость |
всем спасибо за ответы
|
1nb0lz |
Сообщение
#12
|
Гость |
TarasBer, а можно по-подробней с последним случаем, где лежат на одной прямой???
|
TarasBer |
Сообщение
#13
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
TarasBer, а можно по-подробней с последним случаем, где лежат на одной прямой??? Узнав, на какую из координатных осей пректировать отрезки (см. выше), то есть узнав, какую из координат надо забыть, надо посмотреть 4 оставшихся числа - координаты отрезков, по одной на каждый конец. Сначала надо посмотреть на наибольшее и наименьшее из них ("экстремальные числа"). Если они являются координататми концов одного отрезка, то пересекаются. Если нет, то надо посмотреть на оставшиеся координаты отрезков. Если они стоят наоборот, чем экстремальные концы, то отрезки пересекаются, если нет - то нет. -------------------- |
Текстовая версия | 21.12.2024 23:25 |