判斷是否是整數: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為這三點圍成的三角形的面積。簡要證明 上圖中,黑色的三角形面積為矩形 三個三角形,設數,計算,合併同類項...