幾何專題的基礎演算法

2021-08-09 18:59:34 字數 2029 閱讀 5840

整理幾何計算問題的一些資料結構以及判斷點在多邊形內的程式實現,以後會補充二維的凸包演算法

//劉汝佳—演算法競賽入門經典競賽指南 幾何專題

#include

#include

using

namespace

std;

//point

struct point

}; typedef point vector;//從程式實現上,vector只是point的別名.

//向量+向量=向量;點+向量=點

vector operator + (vector a, vector b)

//點-點=向量

vector operator - (point a, point b)

//向量*數 = 向量;

vector operator * (vector a, double p)

//向量/數=向量

vector operator / (vector a, double p)

bool

operator

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

//雙精度資料的誤差處理

const

double eps = 1e-10;

int dcmp(double x)

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)

//逆時針旋轉rad,rad是弧度

vector rotate(vector a, double rad)

vector normal(vector a)

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

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

//規範相交

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

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

//把多邊形分成n-2個三角形

double convexpolygonarea(point* p, int n)

return area/2;

}//點在多邊形內的判定1:射線法

//if語句中說明了3個條件:condition1&2:線段的兩個端點在射線的兩端(射線上和射線上方看成同一端);condition3:線段和射線的交點在測試點的右側(嚴格右側)

//該實現中假設有一條水平向右穿過測試點的射線

bool ispointinpolygon_cn(point *poly, point p, int n)

}return cnt&1;

}//點在多邊形內判定2:繞數法

bool ispointinpolygon_wn(point *poly, point p, int n)

if(wn != 0 ) return

true;

else

return

false;

} int main()

for(

int i=0;icin >> p.x >> p.y;

if(ispointinpolygon_cn(poly, p, m))

cout

<< "yes"

<< endl;

else

cout

<< "no"

<< endl;}}

}

ACM OI 基礎數學演算法專題

本人學習了一定時間的演算法,主要精力都花在數學類的演算法上面 而數學類的演算法中,本人的大部分精力也花費在了數論演算法上 此類演算法相對抽象,證明過程比較複雜 網路上的部落格有寫得非常好的,但也有寫得不明所以的 因此,本人特此開乙個新的專題,專門負責講解一些比較基礎的數學類演算法 但本人知識面也有限...

ACM OI 基礎數論演算法專題

acm oi 基礎數學演算法專題 質數及其判法 已完結 質數的兩種篩法 已完結 算數基本定理與質因數分解 已完結 約數與整除 已完結 整除分塊 已完結 最大公約數 最小公倍數的兩種求法 已完結 同餘與剩餘類 已完結 互質與尤拉函式 已完結 快速冪 已完結 費馬小定理與威爾遜定理 已完結 尤拉定理及其...

計算幾何 幾何基礎

這章早在2017年寒假就在培訓的時候由來自清華的hta老師上過了 但是本蒟蒻那時候並不是懂的太多 所以這週ww老師又上了一遍 大概記錄一下 大概就跟高中必修4的平面向量差不多 有上過的應該都會 a x1,y1 b x2,y2 a b x1x2 y1y2 a b a b cos a,b 運用 若a與b...