一些定義
#include
#include
#include
#include
#include
using
namespace
std;
#define maxn 1200
#define eps 1e-8
struct point
po[maxn];
struct line
;typedef point vector;
vector
operator + (vector a,vector b)
vector
operator - (point a,point b)
vector
operator * (vector a,double b)
vector
operator / (vector a,double b)
bool
operator
<(const point&a,const point&b)
bool
operator == (const point& a,const point &b)
向量叉乘(可以用來求四邊形面積)
double xmulit(point &a,point &b,point &c)
bool across(point &a,point &b,point &c,point &d)
判斷是否是同一條直線
bool one_line(point &a,point &b,point &c,point &d)
判斷點a和點b是否相等
bool is_equal(point &a,point &b)
求兩直線的交點
point intersection(line &u,line &v)
兩點之間的距離
double dis(point &a,point &b)
bool on_line(point pi,point pj,point pk)
return false;
}
判斷線段是否相交
bool segments_intersect(point p1,point p2,point p3,point p4)
判斷點是否在多邊形的內部
int inpoto(point a)
else
if(on_segment(a,b,d))//和頂點相交的情況,如果y值較大則取
else
if(segments_intersect(a,b,c,d))//和邊相交
count++;
}return
count%2;//當l和多邊形的交點數目c是奇數的時候,p在多邊形內,是偶數的話p在多邊形外。
}
求兩點的中點
point mid(point &a,point &b)
向量旋轉
vector rotate (vector a,double rad)
計算幾何學 3
點的內包 判斷點是否在多邊形內。輸入 乙個多邊形點的序列 問題數各個問題的點的資訊 輸出 2代表在圈內 1代表在圈上 0代表在圈外 只要檢查一p為端點且平行於x的射線與多邊形g的邊的相交次數,我們就能判斷給定的點p是否內包與多邊形g。對於構成多邊形各邊的線段設如果a和b外積大小為0且內積小於等於0,...
計算幾何(學習)模板
點結構 struct point 浮點誤差處理 int dblcmp double x 或者int dblcmp double x 判斷線段是否相交並求交點 規範相交 double det double x1,double y1,double x2,double y2 double cross po...
演算法導論之計算幾何學
所屬專欄 演算法導論專欄 計算幾何學是電腦科學的乙個分支,專門研究集合問題的解決的演算法。計算幾何學的問題一般輸入關於一組集合物件的描述,如一組點 一組線段 輸出是對問題的回答,如直線是否相交。三維空間和高維空間很難視覺化,這裡計算幾何學主要基於二維平面,輸入物件用一組點來表示,其中每個pi xi,...