題目在這里:2036 改革春風(fēng)吹
這題的目的就是求多邊形的面積扒吁,求多邊形的面積是通過將多邊形分割成多個三角形,然后求多個三角形的面積和付呕,就能得到多邊形的面積芹务。
而求三角形的面積S=a * b由于題目是逆時針給的坐標(biāo),所以用向量求得的結(jié)果就是正數(shù)亡哄,如果是順時針的話枝缔,求得的結(jié)果就是負(fù)數(shù)。
如圖是將左邊轉(zhuǎn)換為行列式后磺平,行列式的運(yùn)算:
我們可以看到,這個多邊形的面積應(yīng)該是SABC+SACD-SADE
因為在輸入時拣挪,先輸入D的坐標(biāo)再輸入E的坐標(biāo)擦酌,那么當(dāng)我讀取這些坐標(biāo)的時候,對于三角形ADE來講菠劝,就是順時針了赊舶,所以用行列式求出來的值就是負(fù)數(shù)。
將x值存放在數(shù)組a中,y值存放在數(shù)組b中笼平,對于求每個三角形的面積园骆,永遠(yuǎn)都要用到x0,y0寓调。
#include <stdio.h>
int main(){
int a[100],b[100];
int i;
int n;
double ans,tan;
while(~scanf("%d",&n)&&n){
ans=0;
for(i=0;i<n;i++){
scanf("%d%d",&a[i],&b[i]);
}
for(i=1;i<n-1;i++){
tan=(a[0]*b[i]+a[i]*b[i+1]+a[i+1]*b[0]-a[i+1]*b[i]-a[i]*b[0]-a[0]*b[i+1])/2.0;
ans=ans+tan;
}
printf("%.1f\n",ans);
}
}