【一道練習題】
面基
時間限制:1000ms 內存限制:65536kb
通過率:107/134 (79.85%)
正確率:107/319 (33.54%)
題目描述
按順時針或逆時針順序輸入一個簡單多邊形的每個頂點坐標,求這個多邊形的面積。
在幾何形狀中,簡單多邊形是由直線,非相交的線段或“邊”組成的扁平形狀,其成對連接以形成封閉路徑。(百度百科)
輸入
第一行一個整數nn,表示頂點數
接下來n行,每行22個整數x,yx,y表示一個頂點坐標
輸出
對於每組數據,輸出一行,一個浮點數表示面積(保留7位小數)
輸入樣例
3
0 0
100 100
100 0
輸出樣例
5000.0000000
數據范圍
3≤n≤1000003≤n≤100000
0≤x,y≤200
#我的一點思路,不知道對不對:使用向量叉乘計算面積;
for example:S△ABC=0.5*|a×b|;
以下是代碼:
#include <stdio.h> #include <stdlib.h>
int main( ){ int i,j,n; double s=0; double a[15][2]; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<2;j++) scanf("%lf",&a[i][j]); for(i=1;i<n;i++) for(j=0;j<2;j++) a[i][j]=a[i][j]-a[0][j]; for(i=1;i<n-1;i++){ s = s + 0.5* ( a[i][0] *a[i+1][1] - a[i+1] [0] * a[i][1] ); } s=s>0?s:-s; printf("%.7lf",s); return 0; }
我的一點疑問:
1.為什么最后s會出現負值呢?增加了一個判斷條件判斷s是否大於零可以讓這道題AC,但我不明白這個正負號反映出來的幾何問題。
2.*注意考慮凹多邊形。
如果能有人解答,再感謝不過!!