平面幾何常用模板

2021-08-13 08:12:36 字數 3270 閱讀 6806

#平面幾何常用模板

####**定義點的類** ``` struct point

####**定義向量的類**
typedef point vector;

####**定義向量的基本運算**
vector operator + (vector a,vector b)

vector operator - (vector a,vector b)

vector operator / (vector a,double p)

vector operator * (vector a,double p)

double angle(vector v)//求向量的角度從0到2*pi

####**點的基本操作**
//比較兩個點

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

//點到直線的距離

double

distance_to_line

(point p,point a,point b)

//求點在直線的投影點

point get_line_projection

(point p,point a,point b)

//求投影點

一些線段的操作

//點到線段的距離

double distance_to_segment(point p,point a,point b)

bool segment_proper_intersection(point a1,point a2,point b1,point b2)

bool onsegment(point p,point a1,point a2)

應用求多邊形的面積
//多邊形的有向面積

//方法一

double polygonarea (point * p,int n)

return area/2;

}//方法二

double polygonarea2(point *p,int n)

return area/2;

}

#include

#define mem(ar,num) memset(ar,num,sizeof(ar))

#define me(ar) memset(ar,0,sizeof(ar))

#define lowbit(x) (x&(-x))

#define forn(i,n) for(int i = 0;i < n; ++i)

using

namespace std;

typedef

long

long ll;

typedef

unsigned

long

long ull;

const

int prime =

999983

;const

int inf =

0x7fffffff

;const ll inff =

0x7fffffffffffffff

;const

double pi =

acos(-

1.0)

;const

double inf =

1e18

;const

double eps =

1e-10

;const ll mod =

1e9+7;

struct point};

typedef point vector;

vector operator

+(vector a,vector b)

vector operator

-(vector a,vector b)

vector operator

/(vector a,

double p)

vector operator

*(vector a,

double p)

double

angle

(vector v)

//求向量的角度從0到2*pi

intdcmp

(double x)

bool

operator

<

(const point &a,

const point &b)

bool

operator==(

const point &a,

const point &b)

double

dot(vector a,vector b)

double

length

(vector a)

double

angle

(vector a,vector b)

double

cross

(vector a,vector b)

double

area2

(point a,point b,point c)

vector rotate

(vector a,

double rad)

vector normal

(vector a)

//單位法線

//呼叫前確保直線有唯一交點,當且僅當cross(v,w)非0

point get_line_intersection

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

double

distance_to_line

(point p,point a,point b)

//點到直線的距離

double

distance_to_segment

(point p,point a,point b)

point get_line_projection

(point p,point a,point b)

//求投影點

bool

segment_proper_intersection

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

bool

onsegment

(point p,point a1,point a2)

平面幾何基礎

乙個很有資訊量的部落格 向量p1 x1,y1 p2 x2,y2 內積p1 p2 x1x2 y1y2,外積p1 p2 x1y2 x2y1 先利用外積根據是否有 p1 q p2 q 0來判斷點q是否在直線p1 p2上 再利用內積根據是否有 p1 q p2 q 0來判斷點q是否落在p1 p2之間 要求兩直...

vijos 1697平面幾何

ac通道 分析 看到這道題目,我最先想到的是bzoj1370,明顯的並查集呀 我們設直線a 為與直線a垂直的直線,而互相平行的直線可以互相合併。若直線a垂直於直線b,則直線a平行於直線b 這樣就可以把垂直轉換為平行。具體實現過程請參考 include include include using na...

UVALive 4650 平面幾何

題意 給出n個點,每個點有點權,要畫兩個圓,每個圓圈中某些點 兩個圓圈中 的點不能相交 兩個圓圈中的點求和再相乘求最大值。有個很關鍵的條件是三點不 共線。相當於一條直線分成兩堆點 兩側 使得兩側和的乘積最大。直接列舉兩個點定下 一條直線,那麼直線上的兩個點有四種情況,同側兩種異側兩種。include...