隨便翻到的一道題......
題目傳送門
這道題是用向量叉積求多邊形面積。
首先講一下向量叉積(也叫外積)。
設兩個向量的座標表示為(x1,y1)、(x2,y2)。
那麼它們的叉積為x1*y2-x2*y1。
其幾何意義為兩個向量所成的平行四邊形的面積(淺藍色部分)。
兩個向量的叉積與這兩個向量都垂直,且有正負之分。
叉積的正負取決於兩向量夾角sin值的正負(圖中叉積均為:綠向量×紅向量)。
對於兩個點a、b以及原點o,向量oa與向量ob的叉積的一半代表三角形oab的面積。
這樣我們就能通過這個把多邊形分割成三角形,進而求出多邊形的面積。
對於下面這個四邊形abcd:
s(abcd)=s(oab)+s(obc)-s(ocd)-s(oda)。
我們沿著多邊形走一周,依次加上(或減掉)相鄰的兩個頂點與原點形成的三角形的面積就行。
三角形的面積就用叉積算嘛。
而且你可以發現向量的叉積特別可愛,都不需要你判斷是該加上還是該減掉。
叉積算出來是正的,對面積的貢獻就為正;是負的,對面積的貢獻就為負。
最後別忘了最後乙個點和第乙個點也要求一下叉積。
所以多邊形的面積就這麼愉快地算出來啦~
1 #include23intn;4
double
b,ans;56
struct
vec7
a[1000005
];10
11double
cross(vec q,vec w)
1215
16int
main()
17
洛谷 P3372 線段樹 1
今天植樹節,來種一棵線段樹。傳送門如題,已知乙個數列,你需要進行下面兩種操作 1.將某區間每乙個數加上x 2.求出某區間每乙個數的和 輸入格式 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第 i 個數字表示數列第 i 項的初始值。接下來m行每...
洛谷P3374 樹狀陣列 1
乙個數列,滿足如下操作 給其中乙個數加x 求區間和 數列長度n,運算元m滿足1 n m 500000 1 n,m 500000 1 n m 5 0000 0樹狀陣列基礎支援這兩種操作,核心思想是將 1 i 的整體和分成許多個小的區間和,分割的條件是二進位制拆分。首先介紹乙個lowbit,意思是取到二...
洛谷 P2097 資料分發1
有一些電腦,一部分電腦有雙向資料線連線。如果乙個電腦得到資料,它可以傳送到的電腦都可以得到資料。現在,你有這個資料,問你至少將其輸入幾台電腦,才能使所有電腦得到資料。輸入格式 第一行兩個數n,m。n是點數,m是邊數。接下來m行,每行2個整數p,q表示p到q有一條雙向資料線。輸出格式 乙個整數,表示至...