10 4 多邊形面積

2021-06-01 06:59:12 字數 1444 閱讀 9895

10.4    多邊形面積

源程式名            area.???(pas, c, cpp)

可執行檔名        area.exe

輸入檔名          area.in

輸出檔名          area.out

【問題描述】

給出乙個簡單多邊形(沒有缺口),它的邊要麼是垂直的,要麼是水平的。要求計算多邊形的面積。

多邊形被放置在乙個x-y的卡笛爾平面上,它所有的邊都平行於兩條座標軸之一。然後按逆時針方向給出各頂點的座標值。所有的座標值都是整數(因此多邊形的面積也為整數)

【輸入】

輸入檔案第一行給出多邊形的頂點數n(n≤100)。接下來的n行每行給出多邊形乙個頂點的座標值x和y(都為整數並且用空格隔開)。頂點按逆時針方向逐個給出。並且多邊形的每乙個頂點的座標值-200≤x,y≤200。多邊形最後是靠從最後乙個頂點到第乙個頂點畫一條邊來封閉的。

【輸出】

輸出檔案僅有一行,包含乙個整數,表示多邊形的面積。

【樣例】

area.in                                        area.out

10                                              9

0 04 0

4 13 1

3 32 3

2 21 2

1 30 3

【演算法分析】

這道題目就是求乙個多邊形的面積,雖然這個多邊形很特殊——邊都是水平或垂直的,但不妨仍用普通多邊形的求法來做。

設多邊形頂點按逆時針依次為(x0,y0),(x1,y1),(x2,y2),…,(xn,yn),其中(xn,yn)=(x0,y0)。那麼,多邊形面積為:

時間和空間複雜度都是o(n)。

var x,y:array[0..100] of longint;

n,m,i,j,k,sum:longint;

begin

assign(input,'area.in'); assign(output,'area.out');

reset(input); rewrite(output);

readln(n);

for i:=0 to n-1 do

readln(x[i],y[i]);

x[n]:=x[0]; y[n]:=y[0];

for i:=1 to n do

inc(sum,x[i]*y[i-1]-x[i-1]*y[i]);

writeln(abs(sum) div 2);

close(input); close(output);

end.

多邊形面積

點積 a b x1 x2 y1 y2 a b cos 點積的結果是乙個數值 叉積 a b x1 y2 x2 y1 a b sin 叉積的結果也是乙個向量,是垂直於向量a,b所形成的平面,如果看成三維座標的話是在 z 軸上,上面結果是它的模。三角形的面積 向量a和 向量b的叉積的絕對值表示 以 向量a...

多邊形求面積,

這個程式很值得一博。昨天一位學地質的高中同學問我寫個程式求多邊形面積,因為他說看到excel就煩。正好前段時間在csdn上看到乙個帖子求多邊形面積,也想到了乙個演算法,於是寫了這個程式。演算法描述 乙個多邊形的面積可以由這樣兩個系列的梯形來計算,以凸多邊形舉例,在圖形上方的一系列邊和其在x軸的投影組...

多邊形的面積

1 三角形面積 xy平面內,有三角形 123,如下圖所示 1 借助向量叉積和點積,這個三角形的面積公式非常簡單 這個面積是有符號的 1 2 3逆時針排列,則面積為正 1 2 3順時針排列,則面積為負。這是對右手系的總結,如果從背面看這個座標系就成了左手系。在左手系下,面積的正負情況正好相反。所以,關...