利用向量積(叉積)計算三角形的面積和多邊形的面積:
向量的數量積和向量積:
(1) 向量的數量積
(1) 向量的向量積
兩個向量a和b的叉積(向量積)可以被定義為:
在這里θ表示兩向量之間的角夾角(0° ≤ θ ≤ 180°),它位於這兩個矢量 所定義的平面上。
向量積的模(長度)可以解釋成以a和b為鄰邊的平行四邊形的面積。求三角形ABC的面積,根據向量積的意義,得到:
a=axi+ayj+azk;
b=bxi+byj+bzk;
a×b=(aybz-azby)i+(azbx-axbz)j+(axby-aybx)k,為了幫助記憶,利用三階行列式,寫成:
計算任意多邊形的面積:(頂點按逆時針順序排列)
求多邊形面積最基礎的方法就是用剖分法來做的,就是把多邊形分成若干個三角形,然后對每個三角形求面積,求面積,在有精度要求的情況下,不要用海倫-秦九昭公式,海倫公式可能在精度損失方面會比較嚴重,而且計算量很大。
最適合解決任意多邊形面積的方法是:向量積法。
頂點為Pk(k=1,2,3…n)的多邊形,其頂點坐標分別為(x1,y1),(x2,y2),(x3,y3)…(xn,yn)。
在計算幾何里,我們知道,△ABC的面積就是“向量AB”和“向量AC”兩個向量叉積的絕對值的一半。其正負表示三角形頂點是在右手系還是左手系。
hdu 2036:改革春風吹滿地(叉積求凸多邊形面積)
改革春風吹滿地
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 16308 Accepted Submission(s): 8316
4 1 0 0 1 -1 0 0 -1
0
2.0

s=S123+S134+S145+S156+S167+S178
>在坐標系下,三角形面積公式如下。可按向量思路。
S=(double)(x2*y3+x1*y2+x3*y1-x3*y2-x2*y1-x1*y3)/2.0;
1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int n,x1,x2,x3,y1,y2,y3,i; 6 double s; 7 int x[100]; 8 int y[100]; 9 while(scanf("%d",&n)&&n) 10 { 11 s=0; 12 for(i=0;i<n;i++) 13 { 14 scanf("%d",&x[i]); 15 scanf("%d",&y[i]); 16 } 17 x1=x[0]; 18 y1=y[0]; 19 for(i=1;i<n-1;i++) 20 { 21 x2=x[i]; 22 y2=y[i]; 23 x3=x[i+1]; 24 y3=y[i+1]; 25 s+=(double)(x1*y2+x2*y3+x3*y1-x3*y2-x2*y1-x1*y3)/2.0; 26 } 27 printf("%.1lf\n",s); 28 } 29 return 0; 30 }