計算幾何模板(點 線段)2 1

2022-05-16 05:45:43 字數 1904 閱讀 9007

orz發現之前的版子有小錯誤都不知道怎麼在用2333

8.8更新多邊形計算+求直線交點 順便把之前版子統一了一下 希望這周解決計算幾何 然後就不用再看模板了

忘記加重載 / 了。。 更了另乙個求交點情況,不會有除0情況出現

#include#include

#include

#include

using

namespace

std;

const

int inf = 0x3f3f3f3f

;const

int maxn = 100

;const

double eps = 1e-6

;int sgn(double x)

double sqr(double x)

double mysqrt(double n)

struct

point

};typedef point vector;

//向量-向量

vector operator -(const vector &a, const vector &b)

//向量+向量

vector operator +(const vector &a, const vector &b)

//向量*常數

vector operator *(const

double &a, const vector &b)

vector

operator *(const vector &a, const

double &b)

vector

operator /(const vector &a, const

double &b)

//向量*向量 dot

double dot(const vector &a,const vector &b)

//向量x向量

double cross(const vector &a,const vector &b)

//向量==向量

bool isequal(const vector &a,const vector &b)

double length(vector a)

//ab夾角

double angle(vector a,vector b)

//ab、ac組成的平行四邊形面積

double area(point a,point b,point c)

//a逆時針旋轉弧度rad後的向量

vector rotate(vector a,double rad)

//計算a的單位法線,保證a不為0向量

vector normal(vector a)

struct

line

line(point _s,point _e)

};//

線段是否相交、端點算相交

bool

inter(line l1,line l2)

//線段是否相交、端點不算相交

bool

inter2(line l1,line l2)

//求n邊形的面積、res[0~n-1]順序存頂點、n為頂點數,res[n]=res[0]

double area(point res,int

n)

return fabs(ret/2);}

//求兩線交點,要先判斷有無交點

point getlineinterpoint(line l1,line l2)

//求ab與pq交點,功能同上個函式一樣

point crosspt(const point &a, const point &b, const point &p, const point &q)

view code

二維計算幾何模板(點,線)

include include include include include include include include include include include define e exp 1.0 define mod 1000000007 define inf 0x7fffffff d...

計算幾何點,直線,線段模板

include include include include include include define pi acos 1 using namespace std struct point 點 向量 typedef point vector 向量使用點作為表示方法 結構相同 為了 清晰 con...

計算幾何 線段

首先是直線相交,這個簡單,就是看斜率,斜率不同則相交。重點分析線段與線段相交,給你兩組座標p1 x1,y1 p2 x2,y2 q1 x3,y3 q2 x4,y4 判斷p1p2與q1q2是否相交 首先可以很快排除下面四種情況 對於第 種情況滿足條件 max q1.x,q2.x max q1.x,q2....