![]() |
|
|
![]()
|
|
| Левиафан |
|
|||
|
Unregistered |
Мне вот дали задание написать алгоритм, а я что-то никак не врублю:
Буду благодарен за помощь |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
насколько я понимаю, имеются в виду только прямоугольники с вертикальными и горизонтальными сторонами
достаточно вспомнить, что пересечение нескольких множеств можно получить таким образом: 1. берем первое множество 2. находим его пересечение со вторым 3. находим пересечение результата (2) с третьим ... (и т.д.) символически алгоритм можно записаить так: X:=A1 X:=X&A2 X:=X&A3 ... X:=X&An под X и A* имеются в виду прямоугольники под & - пересечение (пересечение двух прямоугольников тоже является прямоугольником, если стороны вертикальны или горизонтальны) таким образом, достаточно на каждом шаге знать координаты X и текущего прямоугольника... -------------------- qqq |
|||
|
||||
| redrick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 547 Регистрация: 7.1.2004 Где: Москва Репутация: нет Всего: 5 |
имхо, тот, кто давал вам задание, не очень владеет математической терминологией или вы как то не точно сформулировали. Просто если все прямоугольники задаются на плоскости, то они пересекутся не по плоскости, а от силы по какому-то многоугольнику. Кроме того в начале говорится о координатах, а потом - о габаритах.
Вобщем попробуйте уточнить -------------------- Имею Мнение Хрен Оспоришь |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Пойди туда не знаю куда...
Левиафан Давай сюда ТОЧНУЮ формулировку (а то бред какой-то) задания. И сразу уж копию справки о вменяемости автора задания... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Непонятно, почему четыре координаты, достаточно трех.
Но, как я понимаю, что стороны прямоугольников не обязательно параллельны осям. Тогда хранить надо координаты фигуры пересечения предыдущей фигуры и очередного прямоугольника. -------------------- С уважением, А. Фролов. |
|||
|
||||
| val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: 1 Всего: 7 |
ИМХО,
maxim1000 абсолютно прав. Ну а само пересечение двух прямоугольников можно запрограммировать путем анализа вершин каждого прямоугольника на их месторасположение внутри другого. -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
| Левиафан |
|
|||
|
Unregistered |
Да нет, я ее в точности переписал из методички. Так что совсем не понятно, да? Хреново. Я вот спрошу у автора задачки и когда он обьяснит, выложу ответ. Может кому-то интересно... |
|||
|
||||
| Левиафан |
|
|||
|
Unregistered |
Чесно говоря я не совсем понял алгоритм maxim1000 и как провести этот анализ тоже... |
|||
|
||||
| Akina |
|
||||||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Попробую переформулировать задачу так чтобы она имела смысл: УСЛОВИЕ
РЕШЕНИЕ [code=]Пусть Хс1, Хс2, Ус1, Ус2 - координаты прямоугольника, являющегося областью пересечения на текущий момент, причем Хс1<Хс2 и Ус1<Ус2. Вводятся координаты очередного прямоугольника Хо1, Хо2, Уо1, Уо2, причем Хо1<Хо2 и Уо1<Уо2. Если существует область пересечения отрезков Хо1-Хо2 и Хс1-Хс2, то ее начальная точка = новому значению Хс1, конечная = новому значению Хс2. Если пересечение отрезков - одна точка, то область пересечения вырождается в отрезок. Если пересечения отрезков нет - область пересечения прямоугольников пуста, нет ее. Точно так же поступаем с координатами по У. Если область пересечения вырождена по обеим коордир\натам - она вырождается в точку.[/code] Это сообщение отредактировал(а) Akina - 27.10.2004, 17:16 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||||||
|
|||||||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: нет Всего: 73 |
Народ, что-то я читаю и торможжжжжу, скажите, прямоугольники лежат в той же плоскости?
-------------------- Теперь при чем :P |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Чисто логически задача несложная. Надо запоминать точки пересечения текущей фигуры (на втором шаге будет первый прямоугльник) и очередного прямоугольника. Понятно, что для этого надо находить точки пересечения линий. Каждая сторона фигуры лежит на линии. Что-то мне подсказывает (может и ошибаюсь), что максимальное количество углов у конечной фигуры N*4, где N - количество прямоугольников. Видимо, потому что каждая сторона прямоугольника не может пересечь более двух сторон многоугольника (или совпадать с ней), грубо говоря, вместо одного угла может сделать максимум 2.
Надо хранить координаты имеющейся фигуры, далее найти точки пересечения сторон очередного прямоугольника со сторонами фигуры (если сторона не пересекает, то надо выяснить, где она проходит), запомнить новые точки. Потом вычислить площадь уже несложно. Так что вся сложность состоит в аккуратном рассмотрении всех случаев и в грамотной структуре данных. Посмотри здесь P.S. Если стороны прямоугольника параллельны осям, то задача совсем простая, думаю, что это не так. -------------------- С уважением, А. Фролов. |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: нет Всего: 73 |
Поясните, кто нибудь... Я ни хрена не понимаю... Что это за пересечение такое? -------------------- Теперь при чем :P |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Ignat
Да бред, говорю же... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Alex101 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Я думаю, тут элементарная описка (может и преподавателя). Имелась в виду ПЛОЩАДЬ. -------------------- С уважением, А. Фролов. |
||||
|
|||||
| Левиафан |
|
|||
|
Unregistered |
Переведено дословно с украинского "площина" |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |