計算幾何模板

2021-08-07 12:39:12 字數 2860 閱讀 7720

多圓面積交

typedef long long ll;  

typedef unsigned long long ull;

typedef vector vi;

const int inf = 0x3f3f3f3f;

const double eps = 1e-10;

const int mod = 100000007;

const int maxn = 1000010;

const double pi = acos(-1.0);

#define sqr(x) ((x)*(x))

const int n = 1010;

double area[n];

int n;

int dcmp(double x)

struct cp

cp(double xx, double yy, double ang = 0, int t = 0)

void get()

} cir[n], tp[n * 2];

double dis(cp a, cp b)

double cross(cp p0, cp p1, cp p2)

int circrosscir(cp p1, double r1, cp p2, double r2, cp &cp1, cp &cp2)

bool circmp(const cp& u, const cp& v)

bool cmp(const cp& u, const cp& v)

double calc(cp cir, cp cp1, cp cp2)

void cirunion(cp cir, int n)

tp[tn++] = cp(cir[i].x - cir[i].r, cir[i].y, pi, -cnt);

tp[tn++] = cp(cir[i].x - cir[i].r, cir[i].y, -pi, cnt);

sort(tp, tp + tn, cmp);

int p, s = cir[i].d + tp[0].d;

for (int j = 1; j < tn; ++j)

} }

void solve()

//area[i]為重疊了i次的面積

//tot 為總面積

double tot = 0;

for(int i=1; i<=n; i++) tot += area[i];

printf("%f\n", tot);

}

int main()

多圓面積並

#include#include#include#include#include#define ld double

#define eps 1e-13

using namespace std;

int n,top,st,ed;

ld xl[1001],xr[1001];

ld ans;

bool del[1001];

struct datat[1001],sk[1001];

struct linep[1001];

ld dis(data a,data b)

bool cmp1(data a,data b)

sort(p+1,p+sz+1,c***);

for(i=1;i<=sz;i++)

st=i;ed=j-1;i=j-1;

mid=(l+r)/2;

fl=getf(l);fr=getf(r);fmid=getf(mid);

ans+=simpson(l,mid,r,fl,fmid,fr,cal(r-l,fl,fmid,fr));

}}int main()

給你一堆點,找銳角三角形。

two pointer 思想。

統計出所有銳角和直=鈍角的數目。

做法是這樣的:對每個點對所有點極角排序,然後two pointer計算每乙個銳角(乙個邊上有好幾個點也會被統計好幾次),直角鈍角。然後ans=(銳角個數-直角鈍角個數*2)/3;因為每乙個角度可能也只可能出現在乙個三角形中。

但是一上來沒弄懂,所以隊友想了乙個思路也能過,先統計直角和鈍角的個數。然後c(n,3)統計所有情況,不能構成三角形的是三點共線的情況,所以n^2logn統計三點共線(two pointer)。然後再減去直角鈍角個數即可。兩種方法均可過。

#include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

struct point

point operator -(const point &a) const

}p[2010];

int n;

ll xmul(const point &a,const point &b)

ll dot(const point &a,const point &b)

bool cmp(const point &a,const point &b)

return xmul(a,b) > 0;

}vectorvec;

int main()

}ans=(rui-2*zhidun)/3;

printf ("%i64d\n",ans);

}return 0;

}

計算幾何模板

sgn返回x經過eps處理的符號,負數返回 1,正數返回1,x的絕對值如果足夠小,就返回0。const double eps 1e 8 int sgn double x double mysqrt double x pt是point的縮寫 int版 struct pt pt int x,int y ...

計算幾何模板

include define vct point using namespace std const double pi atan2 0,1 const double eps 1e 8 int sgn double d struct point bool operator point b const...

計算幾何 模板

include include include include typedef double db const db eps 1e 9 const db pi acos 1 判斷符號 inline intsign db ps 比較大小 inline intcmp db ps,db b 點 struc...