#include
//使用scanf和printf的標頭檔案
#include
//使用c風格字串函式的標頭檔案
#include
//使用演算法庫的標頭檔案,max,min,swap,sort等
#include
//使用cin,cout的標頭檔案
#include
//數學標頭檔案
#include
//使用memset函式的標頭檔案
#define ll long long
#define ull unsigned long long
#define df double
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define fep(i,a,b) for(int i=(b);i>=(a);--i)
#define scf(x) scanf("%d",&x)
#define prf(x) printf("%d\n",x)
#define ddprf(x,y) printf("\n",x,y)
#define deprf(x) printf("[%d]\n",x)
#define dect(x) cout<<'['<#define mset(x,y) memset(x,y,sizeof(x))
#define fopen freopen("t2.in","r",stdin);
#define ac return 0
#define prf1(x) printf("! %d\n",x)
#define prf2(x) printf("? %d\n",x);
const
int maxn=
1e5+10;
const
int inf=
0x3f3f3f3f
;const
int mod=
1e9+7;
const
double eps=
1e-8
;const
double pi=
3.1415926535
;const ull base=
233;
using
namespace std;
struct pot//點
//建構函式初始化 };
typedef pot vec;
double
check
(vec a,vec b)
//(α×β=∣α∣∣β∣sinθ)叉積
double
operator
^(pot a,pot b)
vec operator
-(pot b,pot a)
vec operator
+(pot a,pot b)
//(根據兩個點返回向量);
vec operator
*(vec a,
double k)
//向量乘以乙個常數(及對向量的拉伸,返回向量)
vec operator
/(vec a,
double k)
//向量除以乙個常數(及對向量的收縮,返回向量)!!注意k不為0 !!
bool
operator
<
(const pot a,
const pot b)
//判斷兩個點之間的大小(橫座標作為第一縱座標作為第二引數進行判斷)
bool
operator==(
const pot a,
const pot b)
//(判斷點或向量是否相等)
//(點積滿**換律)
double
dot(vec a,vec b)
//對向量取模求長度
double
length
(vec a)
;//(判斷a向量是否在b向量逆時針方向上)
bool
toleft
(pot a,pot b,pot c)
//用三態函式減小精度問題(判斷double正負)
intsgn
(double x)
struct line//線(點和方向向量構成)
pot get_pot_in_line
(double x)};
//判斷點和直線的位置
intrelation
(pot a,pot b,pot c)
//一定要保證兩直線有交點並且 check(v1,w)!=0
pot line_sp
(pot a1,vec v1,pot a2,vec v2)
//直線到點的距離
double
dis_pot_line
(pot a,pot b,pot c)
//求點在直線上的投影點
pot foot_pot
(pot a,pot b,pot p)
//求點到直線的對稱點
pot sy_pl
(pot a,pot b,pot p)
bool
on_s
(pot a,pot b,pot p)
//點p到線段ab的距離
double
dis_to_s
(pot a,pot b,pot p)
//兩點之間的距離
double
dis_p
(pot a,pot b)
//向量逆時針(向下轉)旋轉90。
vec normal
(vec a)
//向量逆時針旋轉p度|x y|x|cos0 -sin0|
// |sin0 cos0|
vec rotate
(vec a,
double p)
//判斷兩個線段是否相交//算端點加等號
bool
s_inter
(pot a1,pot b1,pot a2,pot b2)
//求多邊形面積,點要逆時針存不然有問題
double
area
(pot p,
int n)
return ans/
2.0;
}//交換兩點座標
inline
void
psp(pot &a,pot &b)
//凸包
pot tp[maxn]
;//tp[1]是y值最小的點
bool
tpcmp
(pot p1,pot p2)
pot s[maxn]
;//凸包上的點
bool
is_tpo
(pot p,
int n)
//判斷是否形成凸包
return1;
}int top;
void
tpo(
)//printf("***");
sort
(tp+
2,tp+
1+n,tpcmp)
; s[1]
=tp[1]
;top=1;
for(
int i=
2;i<=n;i++
) s[top+1]
=tp[1]
;//形成閉圈
}//旋轉卡殼
void
r_cl()
}//圓
struct cir
;double
area()
intis_relation
(cir a)};
//求三角形重心
cir tri_g
(pot a,pot b,pot c)
//求三角心外心
cir tri_p
(pot a,pot b,pot c)
//判斷點是否在凸多邊形內
intin_pn
(pot a,pot p,
int n)
}void
solve()
intmain()
計算幾何模板
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...
計算幾何模板
多圓面積交 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 co...