Реферат: Вычисления площади произвольного многоугольника

Внутренние углы многоугольника будем вычислять следующим образом:

· для i-той вершины, имеющей координаты (Xi , Yi ) найдем координаты входящих и выходящих векторов:

A {Xi –Xi–1 , Yi –Yi–1 } – входящий вектор

B {Xi+1 –Xi , Yi+1 –Yi } – выходящий вектор

· Вычисляем углы, образованные этими векторами с осями координат

· Вычисляем угол i-той вершины ji =180–a1 –a2.

· Находим сумму

· Находим сумму

· Если S1 <S2 , то найденные углы являются внутренними, в противном случае внутренние углы равны 180-ji .

В языке Turbo Pascal нет функции Arccos(x), поэтому его вычисляем, используя следующую формулу . Но значение этой функции может изменяться в интервале от –900 до 900 , поэтому при вычислении действительного угла будем учитывать квадрант, в котором лежит вектор.

Если в процессе отсечения углов произойдет ситуация, что три вершины подряд окажутся на одной прямой, то необходимо вторую из них удалить, т.к. она, строго говоря, не является вершиной и не будет влиять на дальнейшие вычисления. Для определения, лежит ли i-ая вершина на прямой, соединяющей (i–1)-ую и (i+1)-вершины, аналогично найдем входящий и выходящий вектора A и B . Затем их нормируем, т.е. делим каждую координату вектора на модуль этого вектора. Если после этого вектора окажутся равны, т.е. окажутся равными их координаты, то i-тую вершину можно удалить.


Учитывая все вышеприведенное, составляем процедуру вычисления внутренних углов.

procedure Angles;

var

al1,al2,

dx, dy, dxp, dyp,

s_in, s_out, a: real;

i,j: integer;

function ArcCos(a: real): real;

var res: real;

begin

if abs(a)<1.0E-30 then res:=pi/2

else res:=ArcTan(sqrt(1-a*a)/a);

if dx<0 then

if dy>=0 then res:=pi+res

else res:=-pi-res

else

К-во Просмотров: 1181
Бесплатно скачать Реферат: Вычисления площади произвольного многоугольника