博主這裡曾經學過計算幾何(下文簡稱jj),所以沒有證明或者說明某些演算法,不適合初學者食用
用一道例題及黃學長的**來理解:
黃學長**~
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define eps 1e-8
#define pa pair
#define ll long long
#define inf 1000000000
using
namespace
std;
struct p
p(double _x, double _y):x(_x), y(_y){}
friend p operator-(p a, p b)
friend
double
operator*(p a, p b)
}p[105];
struct ll[105];
vector
ve;int n;
double r;
void add(double x, l l)
double f(double x)
return ans;
}double cal(double fl, double fm, double fr, double l)
double simpson(double l, double r, double fl, double fm, double fr, double s, int dep)
double solve(double l, double r)
int main()
也就是說這道題只需要積分求面積就好了,那麼為什麼這個f函式這麼可怕(難以理解)呢?
因為題目說多邊形 所以啊,他有可能長這個樣:
我們再想想我們的積分的本質——把每個x對應的f(
x)f (x
)求和 即 ∑n
x=1f
(x) ∑x=
1nf(
x)當然我只是這麼表示一下方便腦補。也就是說對應到影象上我們要求的是影象內每條豎線的長度的和,舉個栗子吧:
假設我們要求f(
x)f (x
)即粉線處的函式值,那麼我們只需要求l紅
線+l綠
線+l黃
線 l紅線
+l綠線
+l黃線
這也是黃學長**的意圖,我分步剖析一下:
先說ve陣列,這裡面存的是x=x與多邊形的交點
然後說add:我們列舉每條線段,看是否有交點,及在何處
void add(double x, l l)
上方的三個return 分別對應 :該線段在x左邊,x右邊,垂直x軸。這就比較好理解了,因為這三種狀況不可以貢獻面積(第三種可以用直線的面積為0解釋)
然後就是這個點座標,看**釋吧
假設我們要求r的縱座標 即綠色長度,我們設為lg
l
g,**中l.a.x,l.a.y,l.a.x,l.b.y與圖中x1
,y1,
x2,y
2 x1,
y1,x
2,y2
一一對應;
然後我們做輔助線(公尺黃色),我們發現上方是兩個相似三角形!所以我們利用x的比值來確定lg
−lr lg−
lr,**中pickline兩側的公尺黃線比值為t 那麼lg
−lr lg−
lr=(y2−y1
)∗tt
+1( y2
−y1)
∗tt+
1這個不理解的話自己玩兩組資料就好了。
繼續拿題舉例子
bzoj 1845 [cqoi2005] 三角形面積並
題目大意:給定n個三角形,求面積並 n<=100
怎麼做呢?
1.simpson積分,與第乙個例題相似,我們可以求交點,然後求f(x)做(比上乙個例題還好理解一點)。
2.掃瞄線
看圖233
我們對每兩條線段的交點打標記,然後過標記點做掃瞄線。
我們看 第一條掃瞄線與第二條之間只需要 求乙個三角形,而第二三條之間是乙個三角加乙個梯形,那我們就可以用梯形公式求積啦~ s=
12∑i
(上底i
+下底i
)∗h s=1
2∑i(
上底i+
下底i)
∗h=h2∑i(上
底+下底
) =h2
∑i(上
底+下底
)我們只需要特判一下平行x軸的邊,因為它有可能無貢獻(留個讀者考慮)
或者用中位線考慮(比較繁瑣)
首先說一下讀音(畢竟有24
2
4種讀法),xuan zhuan qia ke (音調:2 3 3 2
計算幾何 幾何基礎
這章早在2017年寒假就在培訓的時候由來自清華的hta老師上過了 但是本蒟蒻那時候並不是懂的太多 所以這週ww老師又上了一遍 大概記錄一下 大概就跟高中必修4的平面向量差不多 有上過的應該都會 a x1,y1 b x2,y2 a b x1x2 y1y2 a b a b cos a,b 運用 若a與b...
計算幾何基礎詳解與模板
不知道為啥,還是比較喜歡手寫公式,大概是因為比較方便吧 判等 const double eps 1e 9 int dcmp double x,double y return 1 標頭檔案 include include 常用常數 const double pi acos 1.0 const doub...
caioj 計算幾何 面積 計算幾何 叉積
題意 在乙個平面座標系上隨意畫一條有n個點的封閉折線 按畫線的順序給出點的座標 保證封閉折線的任意兩條邊都不相交。最後要計算這條路線包圍的面積。用叉積有關知識解決。重要結論 abs 三點的叉積 2為這三點圍成的三角形的面積。簡要證明 上圖中,黑色的三角形面積為矩形 三個三角形,設數,計算,合併同類項...