計算幾何模板總結(二)

2021-07-28 05:42:09 字數 1568 閱讀 1001

直線的正交/平行判定

/*兩個向量a,b正交,等價於,向量a,b的點積為0*/

bool isorthogonal(vector a,vector b){

return equals(dot(a,b),0.0);

bool isorthogonal(point a1,point a2,point b1,point b2){

return isorthogonal(a1-a2,b1-b2);

bool isorthogonal(segment s1,segment s2){

return equals(dot(s1.p2-s1.p1,s2.p2-s2.p1),0.0);

/*兩個向量a,b平行,等價於,向量a,b的叉積為0*/

bool isparallel(vector a,vector b){

return equals(cross(a,b),0.0);

bool isparallel(point a1,point a2,point b1,point b2){

return isparallel(a1-a2,b1-b2);

bool isparallel(segment s1,segment s2){

return equals(cross(s1.p2-s1.p1,s2.p2-s2.p1),0.0);

point project(segment s,point p){

vector base=s.p2-s,p1;

double r=dot(p-s.p1,base)/norm(base);

return s.p1+base*r;

/*\以線段s為對稱軸與點p成線對稱的點*/

point reflect(segment s,point p){

return p+(project(s,p)-p)*2.0;

/*兩點間的距離*/

double getdistance(point a,point b){

return abs(a-b);

/*直線l與點p的距離*/

double getdistancelp(line l,point p){

return abs(cross(l.p2-l.p1)/abs(l.p2-l.p1));

/*線段s與點p的距離*/

double getdistancesp(segment s,point p){

if(dot(s.p2-s.p1,p-s.p1)<0.0)return abs(p-s.p1);

if(dot(s.p1-s.p2,p-s.p2)<0.0)return abs(p-s.p2);

`return getdistancelp(s,p);

/*線段s1與線段s2的距離*/

double getdistance(segment s1,segment s2){

if(intersect(s1,s2))return 0.0;

return min(min(getdistance(s1,s2.p1),getdistance(s1,s2.p2)),min(getdistance(s2,s1.p1),getdistance(s2,s1.p2)));

計算幾何 模板總結

計算幾何終極模板 總結 pragma comment linker,stack 102400000,102400000 include bits stdc h define pb push back define ls l,m,now 1 define rs m 1,r,now 1 1 define...

計算幾何模板總結(一)

這一部分主要總結一下在 挑戰程式設計競賽 二 中的一些 常用預處理 define eps 1e 10 設定精度 define pi acos 1 精確圓周率 define inf 1e20 設定無限大 define equals a,b fabs a b 利用c 和stl,對一些基本圖形進行了封裝 ...

計算幾何 二維幾何 模板

幾何意義 向量的點積 a b a b a b cos cos 若cos cos 為正,兩向量之間的夾角為銳角 為負,兩向量夾角為鈍角 為量,兩向量夾角為直角。b在a方向上的投影 向量的叉積 a b a b a b sin sin 數值上表示a和b構成的平行四邊形的面積。include using n...