Задание
1. Напишите программу, которая определяет выпуклость многоугольника с использованием цикла с постусловием.
Площадь многоугольника
Очень часто в учебниках по программированию, рассматривая вычисление площади многоуголника, используют разбиение его на треугольники (Рис 3.6). Понятно, что площадь многоугольника будет равна сумме площадей треугольников. А площадь треугольников определяют с помощью формулы Герона.
Рис 3.6
Недостатки данного способа определения площади многоугольника очевидны. Во-первых, вряде случаев (когда многоугольник является не выпуклым) очень сложно объяснить машине на какие треугольники и как она может разбить исходный многоугольник (смотри рис 3.7). Во-вторых, при определении длин сторон, а также в формуле определения площади присутствует действие извлечения квадратного корня, что очень сильно влияет на точность полученного результата.
Предлагаю Вам рассмотреть более простой способ нахождения площади любого многоугольника.
Для начала определим площадь треугольника. Введем несколько ограничений:
1. Координаты вершин треугольника заданы в порядке обхода его по часовой стрелке.
2. Все координаты вершин положительны.
Из рисунка 3.7 видно, что площадь треугольника будет равна сумме площадей трапеций 1122 и 2233, минус площадь трапеции 1133.
S= (x2-x1)(y2+y1)/2 + (x3-x2)(y3+y2)/2 + (x1-x3)(y3+y1)/2
Так как значение координаты x3 больше чем x1, последнее слагаемое будет со знаком минус.
Рис 3.7
Приведем часть программы нахождения площади многоугольника имеющего N сторон (углов).
Procedure Work;
begin
x[N+1]:=x[1];
y[N+1]:=y[1];
S:=0;
For i:=1 to N do
begin
S:=S+(x[i+1]-x[i])*(y[i+1]+y[i]);
end;
S:=S/2;
end;
Мы рассмотрели случай, когда координаты вершин многоугольника положительны, а что делать, если они отрицательны? Для того, чтобы использовать наш подход, воспользуемся свойством геометрических фигур не менять размера при параллельном переносе.
Рис 3.8
Задание
1. Напишите программу, которая определяет площадь треугольника с использованиием формулы Герона.
2. Напишите программу, которая определяет площадь треугольника с использованиием предложенного подхода. Сравните результаты.
3. Напишите программу, которая определяет площадь многоугольника, у коророго координаты вершин отрицательны.
Достарыңызбен бөлісу: |