計算幾何學簡單的模板

2021-07-09 04:41:29 字數 1789 閱讀 3164

一些定義

#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,...