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順時針排列,則面積為負。這是對右手系的總結,如果從背面看這個座標系就成了左手系。在左手系下,面積的正負情況正好相反。所以,關...