final 計算幾何

2021-10-14 03:55:39 字數 2024 閱讀 4316

判斷是否是整數:fabs(x – (int)x) > eps

double精度1e9,long double精度1e18

實數比較:

eps為精度,sign返回正負,cmp返回大小

typedef

double db;

const db eps=

1e-6

;const db pi=

acos(-

1);int

sign

(db k)

intcmp

(db k1,db k2)

點:

struct point;}

point operator-(

const point &k1)

const;}

point operator

*(db k1)

const;}

point operator

/(db k1)

const;}

intoperator==(

const point &k1)

const

// 逆時針旋轉

point turn

(db k1);}

point turn90()

;}bool

operator

<

(const point k1)

const

db abs()

db abs2()

db dis

(point k1)

//返回向量的單位向量

point unit()

;}void

scan()

void

print()

//返回極角(弧度)

db getw()

//返回原點對稱點

point getdel()

//返回半區

intgetp()

const

};

點積叉積:

這裡預設起點是原點,非原點請平移

db cross

(point k1,point k2)

db dot

(point k1,point k2)

極角排序:

先分上下半區,然後用叉積判斷大小。

旋**1、用旋轉矩陣把點轉換成旋轉之後的點

[ co

sα−s

inαc

osαs

inα]

⋅[xy

]\begin cos\alpha&-sin\alpha\\ cos\alpha&sin\alpha\\ \end · \begin x\\ y\\ \end

[cosαc

osα​

−sin

αsin

α​]⋅

[xy​

]2、用複數相乘,因為複數相乘的結果就是模相乘,輻角相加,所以乘上乙個角度為α的單位向量就可以了

( x+

y⋅i)

⋅(co

sα+s

inα⋅

i)

(x + y·i) · (cos\alpha + sin\alpha·i)

(x+y⋅i

)⋅(c

osα+

sinα

⋅i)結果就是:

直線交點:

先判斷是否平行再求交點

int

checkll

(point k1,point k2,point k3,point k4)

point getll

(point k1,point k2,point k3,point k4)

db convexdiameter

(vectora)

}return ans;

}

還有很多東西遇到再說吧

計算幾何與計算幾何與

博主這裡曾經學過計算幾何 下文簡稱jj 所以沒有證明或者說明某些演算法,不適合初學者食用 用一道例題及黃學長的 來理解 黃學長 include include include include include include include include include include define...

計算幾何 幾何基礎

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

caioj 計算幾何 面積 計算幾何 叉積

題意 在乙個平面座標系上隨意畫一條有n個點的封閉折線 按畫線的順序給出點的座標 保證封閉折線的任意兩條邊都不相交。最後要計算這條路線包圍的面積。用叉積有關知識解決。重要結論 abs 三點的叉積 2為這三點圍成的三角形的面積。簡要證明 上圖中,黑色的三角形面積為矩形 三個三角形,設數,計算,合併同類項...