АВТИ информатика по паскалю / Metod1_2010 / LABOR4
.doc
5. Лабораторная работа №4.
НАХОЖДЕНИЕ ПЛОЩАДИ ФИГУРЫ
Целью задачи является использование двух алгоритмов для решения одной и той же задачи и их сравнительная оценка.
Используются приемы и методы программирования: использование датчика случайных чисел для получения координат точек, принадлежащих заданной области, программирование сложных логических выражений, программирование вложенных циклов с известным числом повторений, разработка модульных программ.

Условие задачи. Вычислить приближенно с точностью площадь S
пересечения двух фигур на плоскости методом растра и методом Монте-Карло
и сравнить методы.
Уточнение условия задачи. Исходными данными задачи является результаты лабора- торной работы №1: если рассматриваемые две фигуры пересекаются, то находится площадь их пересечения.
Метод приближенного вычисления площади.
y
k
отрезков
d
k
отрезков
с
x
a
0 b









Рассмотрим область, являющуюся пересечением эллипса и круга.
Опишем вокруг области прямоугольник. Если каким-то способом зададим n точек, равномерно распределенных внутри прямоугольника, из которых m точек попадает в область пересечения, то можно с определенной степенью точности считать, что m/n – это отношение площади рассматриваемой области к площади прямоугольника. Тогда приближенное значение площади области пересечения можно вычислить по формуле
![]()
Очевидно, что чем больше точек будем задавать, тем точнее будет вычисляться площадь области.
Рассмотрим два способа задания точек внутри прямоугольника: метод Монте-Карло и метод Растра.
Метод Монте-Карло
Координаты х и у каждой из n точек получаем, используя датчик случайных чисел. (см. 8.3). В Турбо-Паскале датчиком является стандартная математическая функция Random, которая при каждом ее выполнении выдает псевдослучайное число, равномерно распределенное на отрезке [0, 1]. Для того, чтобы инициировать эту функцию, надо обратиться к процедуре Randomize.
Н
… Randomize;
…
х
:= Random;
…
Следует обратить внимание, что для задачи требуется равномерное распределение точек на отрезке [a, b] по оси OX и на отрезке [c, d] по оси OY. Поэтому для получение координаты (x,y) надо отобразить результаты функции Random с отрезка [0, 1] на эти отрезки соответственно.
Метод Монте-Карло состоит в том, чтобы с помощью датчика случайных чисел Random получить n раз случайные точки (x, y) и подсчитать, какое количество из них принадлежит рассматриваемой области.
Метод Растра
Нанесем сетку (растр) на прямоугольник, разделив каждую сторону прямоугольника на k равных отрезков. Узлы этой сетки задают точки с координатами (x, y),
где x = a, a + hx, a + 2*hx, …, b для шага hx = (b - a) / k;
y = c, c + hy, c + 2*hy, …, d для шага hy = (d - c) / k;
n = k*k.
Метод растра состоит в следующем: просматривая узлы сетки (x, y) в определенном порядке, подсчитываем количество узлов, которые принадлежит интересующей нас области (например, области пересечения фигур).
Этапы разработки программы.
-
Изменить спецификацию задачи лабораторной работы №1 в связи с новым условием
задачи и соответствующим расширением состава входных и выходных данных.
-
В качестве функциональных тестов подобрать входные данные для простого случая
пересечения фигур. Можно выбрать случай вложения фигур, тогда одна из фигур является областью пересечения и ее площадь легко вычисляется по формуле. Для иллюстративного примера – это случай вложения круга в эллипс.
-
Изменить программу, выполнив первый шаг (описание входных-выходных данных)
и второй шаг (отделение ввод-вывод-обработка) проекта программы для измененной спецификации. Вставить в программу (в ветвь, когда фигуры пересекаются) вычисление границ a, b, c, d и абстракцию Приближенное вычисление площади. Отладить для простейшей заглушки, например, вычисление площади построенного прямоугольника.
-
Написать логическое выражение, которое отвечает на вопрос: «Принадлежит ли
точка (x, y) заданной области пересечения?» Если принадлежит, то результат равен true, а если не принадлежит, то результат равен false.
Пример.
P1:=
(sqr(x)+sqr(y))
r*r ; P2:= (sqr(x)/sqr(a)+sqr(y)/sqr(b))1
{Точка (х, у)
принадлежит пересечению круга и
эллипса?}
if P1
and P2 then
else
{Принадлежит}
{Не
принадлежит}
-
Вместо простейшей заглушки вставить проверку принадлежности точки области
пересечения. Отладить, выбирая точки, принадлежащие области, лежащей на границе области, вне области пересечения фигур.
-
Изучить раздел 7.1 “Итерационные методы” и использовать общий алгоритм для
приближенного вычисления площади фигуры .
Из задачи
Приближенное
вычисление площади
(сегмент С1) выделяется подзадача
Вычисление
m
(сегмент С2),
Sold
и Snew
- площади фигуры на предыдущем и текущем
шагах итерации.
Каждое значение
площади Snew
вычислено для большего количества
точек, чем Sold.
{Прибл.
вычисление площади}
С1 <Инициализация
Snew
и k>
повторить
Sold
:=Snew
C2
<Вычисление
n
и Snew>
<Изменение
k>
до
Snew - Sold <
{Вычисление m}

Отладить, раскрыв абстракцию Вычисление m простейшей заглушкой, например m:=n.
-
Добавить в программу описание интерфейса процедуры MonteCarlo_m (см. 7.10).
Раскрыть в
сегменте С1 абстракцию Вычисление
m
в виде оператора процедуры
MonteCarlo_m(a,b,c,d,k,m).
Все параметры процедуры должны быть
описаны в главной программе.
Следует отметить,
что к входным данным процедуры относится
и описание области пересечения фигур,
но мы ее локализуем в процедуре. Тем
самым процедура теряет свойство
универсальности.
{Входные:
вещ
a,b,c,d
– границы C2
прямоугольника,
цел
k
–число разбиений;
Выходные:
цел m
– число точек, принадлежащих области
пересечения}
procedure
MonteCarlo_m (a,b,c,d:real;
k:longint;
var m:longint);
var
<Описание
локальных переменных>
begin
<Алгоритм
вычисления m>
end
Отладить интерфейс процедуры с использованием заглушки m:=n в сегменте С2.
-
Заменить заглушку программой, реализующей метод Монте-Карло.
Отладить программу для разных вариантов пересечения фигур. При выборе конт -рольной точки выполнить рекомендации п.2 и сравнить результаты вычисления приближенного вычисления пощади фигуры с точным вычислением по формуле.
Выполнить эксперимент: выбирая различные формулы для увеличения k, найти такие, которые улучшают такие свойства метода, как скорость сходимости (число итераций) и время их выполнения. Сдать лабораторную работу преподавателю, имея полную документацию с графическим представлением выполненных тестов.
-
Повторить п.7 и п.8 для метода Растра разработав процедуру Rastr_m.
Рекомендация. Для того, чтобы можно было корректно провести сравнительный анализ
алгоритмов Растр и Монте-Карло, они должны выполняться в одинаковых условиях, включающих одинаковые формулы для увеличения k и генерацию k*k (а не k!) точек в методе Монте-Карло.
-
Изменить структуру программы, выделив в отдельные процедурные модули
следующие алгоритмы:
- вычисление площади фигуры (не зависит от способа задания точек) ;
- вычисление m методом Монте-Карло и методом Растра (не зависят от фигуры).
Рекомендация. Оформить описание фигуры в виде функции и использовать способ подстановки параметров по имени.
Нарисовать структурную схему полученной программы.
