多邊形面積 ssl1213 計算幾何

2021-07-22 22:10:19 字數 1451 閱讀 2192

中學生傑利陶醉於數學研究.他思考的問題對於專家而言可能太多簡單,但作為乙個15歲的業餘愛好者,他做得非常棒.他太熱衷思考數學問題,以至於輕易就學會了試用數學方法來解決碰到的問題.一天,他看到桌上的一張紙.他四歲的妹妹瑪利在上央畫了一些線.那些線恰好構成了乙個凹多邊形,如下圖:

"棒極了",他想,"這些多邊形看起來是規則的.我曾經學過怎樣計算三角形、矩形和圓形的面積。我一定能找到計算這些圖形的方法。"他確實做到了。首先,他標記多邊形頂點的座標。如圖二所示。隨後,他毫不費力的求得結果0.75。

當然,他不會滿足解決這樣簡單的問題。「嗯,如果紙上面是任意乙個多邊形,我們應該怎樣計算它的面積呢?」他問自己。可他一直都沒有找到計算多邊形面積的通用方法。他清楚地明白以他的能力無法找到總是的答案。所以他向你請教。他會很感謝你的好心幫助。

第一行是乙個整數n,代表圖形的頂點數(1<=n<=1000).

接下來的n行,每行一對實數,代表頂點座標(xi,yi)。每個樣例的圖形由第乙個頂點連線第二個頂點,第二個頂點連線第三個頂點……最後第n個頂點連線第乙個頂點形成封閉多邊形。

輸出圖形面積或字串」impossible」

如果圖形是乙個多邊形,計算他的面積(精確到小數點後兩位)。如果輸入的頂點不能構成多邊形(也就是說,一條邊和另一條邊不相連的邊相交,例如,四條線段的圖形,第一條線段和第三條線段相交),就輸出」impossible」。指出圖形不可能是多邊形。如果頂點的數量不足以構成乙個封閉的多邊形,也輸出」impossible」

n只有1000,列舉不同邊判斷相交,叉積算面積

判斷兩線段是否相交:

資料坑會有0 (零個端點是毛多邊形啊!!!!)

再一次show出c++黨的優越性

#include 

using

namespace

std;

struct pointt[1001];

double cros(point a,point b,point c)

bool banana(point a,point b,point c,point d)

int main()

for (int i=1;i<=n;i++)

scanf("%lf%lf",&t[i].x,&t[i].y);

for (int i=2;i<=n;i++)

for (int j=1;jif ((i!=j)&&(i!=j+1)&&banana(t[i-1],t[i],t[j],t[j+1]))

for (int i=3;i<=n;i++)

ans+=cros(t[i],t[i-1],t[1]);

if (ans<0)

ans=-ans;

printf("%.2f\n",ans);

return

0;}

多邊形面積 ssl1213 計算幾何

輸入乙個多邊形,求面積。第一行是乙個整數n,代表圖形的頂點數 n 接下來的n行,每行一對實數,代表頂點座標 xi,yi 每個樣例的圖形由第乙個頂點連線第二個頂點,第二個頂點連線第三個頂點 最後第n個頂點連線第乙個頂點形成封閉多邊形。輸出圖形面積或字串 impossible 如果圖形是乙個多邊形,計算...

計算多邊形的面積

題目 輸入乙個點列,順次連線成乙個封閉多邊形,計算多邊形的面積 分析 方法一,計算面積可以考慮定積分的形式,定積分有正有負,順次求和,重複部分相互抵消,最後剩下的總面積的絕對值就是多邊形的面積。從線性積分後的結果可以容易的看出,直線段的積分實際上就是求該直線段與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 的...