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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2010, 17:41   #1
Ильнар70
 
Регистрация: 22.09.2010
Сообщений: 8
По умолчанию Задача о разрезании прямоугольника

Помогите решить задачу на паскале.
В первой строке входного файла записана ширина w и высота h торта (1<=w,h<=20). Во второй строке записано количество разрезов n (0<=n<=50). В остальных n строках записаны четверки целых чисел x1,y1,x2,y2 - координаты двух противоположных углов разреза (0<=x1,x2<=w, 0<=y1,y2<=h).
Нужно записать количество получившихся кусков, на которые распадается этот прямоугольник после того, как произвели n разрезов.
Даже не представляю себе, как решать задачи такого типа. Может, надо чертить прямоугольник, а потом линии разреза? Потом как-то пересчитать получившиеся куски?
Ильнар70 вне форума Ответить с цитированием
Старый 24.10.2010, 23:42   #2
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Самое примитивное решение - это прогнать Монте-Карло))) И оно может даже пройти при плохих тестах. Т.е. Взять, допустим, миллион точек на торте, и для каждой проверить, как она размещена относительно все прямых (слева или справа, если их векторизировать). Каждый уникальный набор размещений - новый кусок.
Вариант получше - найти все точки пересечения прямых на торте, отсортировать их по одной из координат, и дальше что-то типа выметающей прямой использовать. Там будет только одна проблемка, если есть прямая, параллельная координатной оси... Но это можно поправить.

А вообще есть хорошее алгоритмическое решение, основанное только на уравнениях прямых, но я его никогда не читал (мне хватало выметающей прямой), а сейчас не могу найти.
LeBron вне форума Ответить с цитированием
Старый 25.10.2010, 17:16   #3
Ильнар70
 
Регистрация: 22.09.2010
Сообщений: 8
По умолчанию

Вот бы мне это уравнение. Просто я к олимпиаде готовлюсь, а такие типы задач часто встречаются)
Пожалуйста, опишите по-подробней, как решать такие задачи с помощью выметающей прямой.

Последний раз редактировалось Ильнар70; 25.10.2010 в 17:22.
Ильнар70 вне форума Ответить с цитированием
Старый 25.10.2010, 17:42   #4
WhiteSpirit
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 82
По умолчанию

Как мне кажется...
После первого разреза торт разделяется на 2 куска.
Делаем второй разрез, если он пересекается с первым, то будет 4 куска, если нет, то 3. Ну и так далее. То есть, количество кусков = количество разрезов + 1 + количество пересечений, при этом пересечения считаются в пределах прямоугольника, но не на периметре.
Осталось только посчитать, сколько пересечений имеет каждая линия разреза.
WhiteSpirit вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
delphi, разворот прямоугольника KaZaaM Помощь студентам 3 25.05.2010 08:53
Площадь прямоугольника AndrSil Помощь студентам 5 22.04.2010 23:23
Вращение прямоугольника Ponaroshku Паскаль, Turbo Pascal, PascalABC.NET 11 03.11.2009 09:22
Вращение прямоугольника Ponaroshku Общие вопросы Delphi 0 25.05.2009 23:09
Стороны прямоугольника Caragius Microsoft Office Excel 8 27.12.2008 03:02