輸入乙個多邊形,求面積。
第一行是乙個整數n,代表圖形的頂點數(1<=n<=1000).
接下來的n行,每行一對實數,代表頂點座標(xi,yi)。每個樣例的圖形由第乙個頂點連線第二個頂點,第二個頂點連線第三個頂點……最後第n個頂點連線第乙個頂點形成封閉多邊形。
輸出圖形面積或字串」impossible」
如果圖形是乙個多邊形,計算他的面積(精確到小數點後兩位)。如果輸入的頂點不能構成多邊形(也就是說,一條邊和另一條邊不相連的邊相交,例如,四條線段的圖形,第一條線段和第三條線段相交),就輸出」impossible」。指出圖形不可能是多邊形。如果頂點的數量不足以構成乙個封閉的多邊形,也輸出」impossible」
n只有1000,列舉不同邊判斷相交,叉積算面積
判斷兩線段是否相交:
資料坑會有0 (零個端點是毛多邊形啊!!!!)
然而這是一道pascal的主場(pascal的速度快)
const
dy:array[1..9] of longint=(1,1,1,0,0,0,-1,-1,-1);
dx:array[1..9] of longint=(-1,0,1,-1,0,1,-1,0,1);
var n:longint;
x,y:array[0..1010] of real;
function
banana
(x1,y1,x2,y2,x3,y3:real):real;
begin
banana:=(x1-x2)*(y3-y2)-(y1-y2)*(x3-x2);
end;
procedure
init;
var i,j,k:longint;
ans:real;
x0,y0:real;
x1,y1:real;
x2,y2:real;
begin
readln(n);
if n<3
then
begin
writeln('impossible');
exit;
end;
readln(x2,y2);
x[1]:=x2; y[1]:=y2;
x0:=x2; y0:=y2;
x1:=0; y1:=0;
for i:=2
to n do
begin
x1:=x2; y1:=y2;
readln(x2,y2);
x[i]:=x2;
y[i]:=y2;
ans:=ans+(x1*y2)-(x2*y1);
end;
for i:=1
to n-1
dofor j:=i+1
to n-1
dobegin
if (banana(x[j],y[j],x[j+1],y[j+1],x[i],y[i])*banana(x[j],y[j],x[j+1],y[j+1],x[i+1],y[i+1])<0) and (banana(x[i],y[i],x[i+1],y[i+1],x[j],y[j])*banana(x[i],y[i],x[i+1],y[i+1],x[j+1],y[j+1])<0)
then
begin
write('impossible');
exit;
end;
end;
i:=n;
for j:=1
to n-1
doif (banana(x[j],y[j],x[j+1],y[j+1],x[i],y[i])*banana(x[j],y[j],x[j+1],y[j+1],x[1],y[1])<0) and (banana(x[i],y[i],x[1],y[1],x[j],y[j])*banana(x[i],y[i],x[1],y[1],x[j+1],y[j+1])<0)
then
begin
write('impossible');
exit;
end;
ans:=ans+(x2*y0)-(y2*x0);
ans:=abs(ans);
writeln(ans/2:0:2);
end;
begin
init;
end.
多邊形面積 ssl1213 計算幾何
中學生傑利陶醉於數學研究 他思考的問題對於專家而言可能太多簡單,但作為乙個15歲的業餘愛好者,他做得非常棒 他太熱衷思考數學問題,以至於輕易就學會了試用數學方法來解決碰到的問題 一天,他看到桌上的一張紙 他四歲的妹妹瑪利在上央畫了一些線 那些線恰好構成了乙個凹多邊形,如下圖 棒極了 他想,這些多邊形...
計算多邊形的面積
題目 輸入乙個點列,順次連線成乙個封閉多邊形,計算多邊形的面積 分析 方法一,計算面積可以考慮定積分的形式,定積分有正有負,順次求和,重複部分相互抵消,最後剩下的總面積的絕對值就是多邊形的面積。從線性積分後的結果可以容易的看出,直線段的積分實際上就是求該直線段與x軸所圍成的區域的梯形的面積int p...
計算幾何 多邊形面積
彙總篇 計算幾何彙總 規定頂點逆時針方向的多邊形面積為正 取原點0 0,0 s a,b,c,d s o,a,b s o,b,c s o,c,d s o,d,a 圖中o在外部,obc,ocd,oda 全部是正的,加起來構成了5變形 obcda 的面積,但 oab是負面積,因此最後剛好等於 abcd 的...