開計算幾何的坑辣
之前就是一些點、線、面、以及凸包、半平面交、旋轉卡殼
對於面積的並,如果全是矩形,可以矩形面積並,輪廓線全是直線,可以叉積
當遇到非常不規則的圖形組合的時候,如圓弧,就要用到積分了。
好部落格:我
思想:不斷用二次函式(最常見簡單的帶弧函式)擬合影象計算面積。
但是這個擬合,不是直接求出最接近的二次函式,而是用橫座標為l,r,mid三點直接確定二次函式,並且計算積分。
證明見上面部落格。
顯然直接做,,,精度不知道差到**去了。
思想:不斷用二次函式(最常見簡單的帶弧函式)擬合影象計算面積。通過分治縮小規模以保證精度。
通過和l,lmid,mid加上mid,rmid,r的計算面積進行比較,如果誤差在允許範圍內,直接返回
否則遞迴計算左右面積加起來。
顯然規模越小,越精確。
複雜度:o(玄學)
適用條件:
其實比較差勁。
影象必須資料範圍不大,並且精度要求不高。
而且輪廓線必須「平滑」,出題人不會卡你:
除去三個「角」,如果那個弧線就是拋物線的話,直接涼涼了。
【模板】自適應辛普森法1 套公式。也可以直接手推積分。待定係數法求ln(|ax+b|)的係數
double【模板】自適應辛普森法2 套公式。大力推導(也可以打表),a<0時候不是收斂的。a,b,c,d,l,r;
double f(double
x)double ji(double a,double
b)double calc(double l,double r,double eps,double
ans)
intmain()
[noi2005]月下檸檬樹
難點在求f(x)
求出相鄰圓的公切線(用相似三角形)。求f時候,把所有的圓和線都掃一遍,如果x在其中,則對計算出的縱座標求max
直接simpson時候傳入f(l),f(r),f(mid)可以從6次計算變成2次計算
//view codeluogu-judger-enable-o2
#include#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
using
namespace
std;
typedef
long
long
ll;template
il void rd(t &x)
template
il void output(t x)
template
il void ot(t x)
template
il void prt(t a,int st,int nd)
namespace
miraclec[n];
struct
po po(
double xx,double
yy)};
struct
linet[n];
inttot;
double gou(double c,double
b)void com(int i,int
j)else
}double f(double
x) }
for(reg i=1;i<=tot;++i)
}return
ret;
}double ji(double l,double r,double fl,double fr,double
fm)double calc(double l,double r,double eps,double fl,double fr,double fm,double
ans)
intmain()
for(reg i=1;i<=n;++i)
++n;
c[n].r=0
;
//for(reg i=1;i<=n;++i)
for(reg i=1;ii)
//cout<
for(reg i=1;i<=tot;++i)
double l=23333333,r=-23333333
;
for(reg i=1;i<=n;++i)
double fl=f(l),fr=f(r),fm=f((l+r)/2
); printf(
"%.2lf
",2*calc(l,r,1e-3
,fl,fr,fm,ji(l,r,fl,fr,fm)));
return0;
}}signed main()
/*author: *miracle*
*/
自適應辛普森積分
寫在前面方便複習 例題 題目大意 給定 a,b l,r a,b,l,r a,b,l,r 求橢圓 x2a 2 y2 b2 1 frac frac 1 a2x2 b2y2 1 在 l,r l,r l,r 的積分 題目分析 題目所求即為 2 l rb1 x2a2 dx 2 int l rb sqrt dx...
自適應辛普森積分
乙個完全不會計算幾何的蒟蒻的自我拯救 有的時候會有一些毒瘤計算幾何題,要求的圖形面積邊緣是一段函式,而這個函式解析式通常非常繁瑣,沒辦法直接用公式積分,所以就需要用辛普森積分求近似值。辛普森積分的用途就是在精度要求不高的時候 通常是求圖形面積 求函式積分的近似值,大概步驟就是在積分區間 a,b 中不...
自適應辛普森積分
自適應辛普森積分是一種解決定積分求解問題的演算法。給出乙個函式 f x 求 int l rf x x 我們考慮用一條拋物線來近似這個函式,設 g x ax 2 bx c 那麼可得 begin fraca r 3 l 3 fracb r 2 l 2 c r l frac frac end 那麼這個玩意...