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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 16.04.2011, 20:45   #1
sp.caster
Пользователь
 
Регистрация: 29.01.2009
Сообщений: 60
По умолчанию Ось с прямоугольниками, найти общую площадь

Дана ось на которой множество прямоугольников, найти площадь фигуры образованной ими. Для ясности вот картинка, толстой линией выделена интересующая фигура http://pikucha.ru/i4NK2

Картинка примерна и на практике в программе прямоугольники могут быть в разном количестве, размере и месте

Последний раз редактировалось sp.caster; 16.04.2011 в 20:50.
sp.caster вне форума
Старый 16.04.2011, 21:33   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) сортируете все прямоугольники по координатам левых сторон.
2) в цикле от самой левой вертикальной границы до самой правой.
находите участок до ближайшей (вправо) вертикальной границы. находите максимальную высоту (т.к. в найденном промежутке внутри нет границ, значит изменений высок тоже нет. умножаем высоту на длину найденного участка. прибавляем к общей сумме (общая площадь).
повторяем в цикле.
всё.

Добавлено
а ещё можно решить задачу "в лоб":
выбрать минимальный шаг - и находить максимальную величину в каждом Xi
Площадь := Сумма всех произведений по i ( deltaX * ВысотаВточкеXi )


Добавлено
ну и рисунок Вы выложили! Целое эпическое полотно!!
позволю себе продублировать его в своём сообщении (немножко подрезав, разумеется!)
Изображения
Тип файла: jpg image3.jpg (27.9 Кб, 64 просмотров)

Последний раз редактировалось Serge_Bliznykov; 16.04.2011 в 22:45.
Serge_Bliznykov вне форума
Старый 17.04.2011, 06:25   #3
sp.caster
Пользователь
 
Регистрация: 29.01.2009
Сообщений: 60
По умолчанию

спасибо конечно за редакцию рисунка) по поводу "в лоб":
то есть найти минимальный шаг? что за максимальная величина в каждом xi?

Хотя приглядевшись первый метод показался более понятным, трудность теперь в одном, закодить

Последний раз редактировалось sp.caster; 17.04.2011 в 06:56.
sp.caster вне форума
Старый 17.04.2011, 11:18   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
то есть найти минимальный шаг? что за максимальная величина в каждом xi?
минимальный шаг - это тот шаг (он же дельта X, он же приращение по оси X), который нам гарантирует, что изменяя координату X мы попадём точно в каждую границу.
Искать его прийдётся действительно по значения координат - прийдётся выделить в каком минимальном десятичном разряде координат есть значимая величина.
Кстати, если координаты целочисленные, то шаг можно всегда брать равным единице и не морочиться!
Если же координаты вещественные, то шаг должен быть не больше, чем единичка в наименьшем значащем разряде.
Ну, если даны координаты вертикальных сторон:
10, 12.5, 22.75, 25.1, 75.578, 100
то, очевидно, что наименьших значимый разряд - это тысячные (координата 75.578) и шаг должен быть 0.001

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

Цитата:
что за максимальная величина в каждом xi?
допустим, у нас есть какая-то координата X
тогда, перебрав в цикле все прямоугольники, у которых координата левой стороны <=X и, одновременное, координата правой стороны >=X мы можем получить все высоты прямоугольников в данной точке. Очевидно, что нас интересует максимальное значение высоты (это будет самый высокий прямоугольник, перекрывающий остальные прямоугольники в данной точке). Вот эту высоту и надо умножать на шаг приращения. Получим площать маленького вертикального прямоугольничка.
А вообще, этот способ мне наявело графическим смыслом определённого интеграла (см. например, википедию)


Цитата:
Хотя приглядевшись первый метод показался более понятным, трудность теперь в одном, закодить
согласен. первый способ более "честный"!
Успехов в реализации.
Serge_Bliznykov вне форума
Старый 17.04.2011, 12:49   #5
sp.caster
Пользователь
 
Регистрация: 29.01.2009
Сообщений: 60
По умолчанию

Спасибо огромное, а как задать в программе некое случайное количество прямоугольников случайных размеров и в случайном месте? Полагаю начинать мне надо именно с этого)

м-м-м, снимаю вопрос, т.к. предположу что есть входной файл с числом прямоугольников и соответственно координатами левого верхнего и правого нижнего угла прямоугольников

Последний раз редактировалось sp.caster; 17.04.2011 в 13:36.
sp.caster вне форума
Старый 17.04.2011, 16:59   #6
sp.caster
Пользователь
 
Регистрация: 29.01.2009
Сообщений: 60
По умолчанию

как перебирать прямоугольники? что-то блин ничего у меня не получается
sp.caster вне форума
Старый 17.04.2011, 17:49   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
как перебирать прямоугольники?
ну, у Вас же есть структура, где храняться координаты? (Массив, например)... вот в цикле и перебирать... только сначала отсортировать по левым границам.
Serge_Bliznykov вне форума
Старый 17.04.2011, 21:19   #8
sp.caster
Пользователь
 
Регистрация: 29.01.2009
Сообщений: 60
По умолчанию

Для меня проблема закодить, а не в понимании... Я представляю вроде как осуществить решение, нужно составить каким-то неведомым для меня образом массив из 3 значений, (x, н (или к), h), где х - координата новой стороны очередного прямоугольника, н и к, начало или конец этой стороны соответственно, а h - высота. Далее, перебирая значения по х и учитывая высоту, суммируем по частям площади прямоугольников. Проблема перевести в код=(

Последний раз редактировалось sp.caster; 18.04.2011 в 14:28.
sp.caster вне форума
Старый 18.04.2011, 16:56   #9
sp.caster
Пользователь
 
Регистрация: 29.01.2009
Сообщений: 60
По умолчанию

фак, завтра сдавать
sp.caster вне форума
Старый 18.04.2011, 16:59   #10
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
фак, завтра сдавать
тут помогут
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти площадь фигуры samouelson Помощь студентам 2 17.12.2010 20:22
как найти ось на жёстком диске alex(21) Свободное общение 10 07.10.2010 15:04
Найти S – суммарную площадь N равнобедренных треугольников sllh_111 Помощь студентам 7 08.05.2010 21:03