模板 幾何基礎

2022-07-18 23:27:25 字數 2510 閱讀 5131

部分函式已驗證是正確的,還沒有完全驗證所有的函式有沒有寫正確

1 #include 2

using

namespace

std;34

const

double eps = 1e-10;5

int dcmp(double x)

9struct

point12}

1314

typedef point vector;

15//

向量的+-*/

16 vector operator + (vector a,vector b)

17 vector operator - (point a,point b)

18 vector operator * (vector a,double p)

19 vector operator / (vector a,double p)

2021

//座標的比較

22bool

operator

< (const point& a,const point&b)

25bool

operator == (const point& a,const point&b)

2829

//點積

30double dot(vector a,vector b)

31//

向量的長度

32double length(vector a)

33//

兩個向量的夾角

34double

angle(vector a,vector b)

37//

叉積38

double cross(vector a,vector b)

39//

三點組成的三角形的有向面積的兩倍

40double area2(point a,point b,point c)

41//

向量旋轉 rad:弧度

42 vector rotate(vector a,double

rad)

45//

獲得向量的單位法線(左轉90度)

46vector normal(vector a)

5152

//得到兩條直線的交點

53//

point p=p0+tv 可表示在直線上的所有點 v=(b-a) 直線上的兩點

54//

當表示為線段的時候0<=t<=1

55//

當表示成射線的時候t>0

56//

需要注意的是:兩直線p+vt1,q+wt2有唯一乙個交點。cross(v,w)!=0

57point getlineintersection(point p,vector v,point q ,vector w)

6263

//點到直線的距離

64double

distancetoline(point p,point a,point b)

68//

點到線段的距離

69//

70//

71//

用點積判斷,用點積和叉積來計算

72double

distancetosegment(point p,point a,point b)

7980

//求點在直線上面的投影

81point getlineprojectection(point p ,point a,point b)

8586

//判斷線段是否相交(不包括端點)

87bool

segmentproperintersection(point a1,point a2,point b1,point b2)

92//

93//

保證p在向量a1a2的方向上 && p不在a1a2或者a2a1的延長線上

94bool

onsegment(point p,point a1,point a2)

9798

//求凸包面積,p裡面的點需要根據一定方向排序(順時針或者逆時針)

99double convexpolygonarea(point* p,int

n)104

return

area;

105}

106107

//返回凸包的頂點個數,ch陣列儲存了凸包頂點

108//

輸入的點不能有重複

109//

兩個while迴圈的判定條件裡面的《表示允許凸包的邊上有點,<=表示凸包的邊上不允許有點

110//

需要的話用dcmp()提高精度

111int convexhull(point* p,int n,point*ch)

118int k=m;

119for(int i=n-2;i>=0;i--)

123if(n > 1) m--; //

去掉起始點

124return

m;125 }

計算幾何基礎 模板

目錄計算幾何拖了這麼久,終於拖到省選前了。emm不求能a題,只求寫暴力。參考 ps 剛開始寫的 讀入用的p i point 因為初始化了建構函式所以這麼讀進去橫縱座標可能是反的。有些題並沒有影響所以以前的就不改了。include include include include include inc...

計算幾何基礎詳解與模板

不知道為啥,還是比較喜歡手寫公式,大概是因為比較方便吧 判等 const double eps 1e 9 int dcmp double x,double y return 1 標頭檔案 include include 常用常數 const double pi acos 1.0 const doub...

二維幾何模板 二維幾何基礎

二維幾何模板 include include include include include include include include include using namespace std 二維幾何基礎 struct point typedef point vector const doub...