二維幾何基礎

2021-08-15 19:57:42 字數 2140 閱讀 1219

在幾何中,向量是乙個炒雞重要的東西,像空氣對於人,水對於魚……qaq

在這裡就不詳細介紹向量了,大家在高中數學中會學到,數學毒瘤,貌似資訊也是哈哈哈

下面是他們的常用定義:

struct point

//建構函式,方便**編寫

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

//向量+向量=向量, 點+向量=點

vector

operator + (vector a,vector b)

// 點-點=向量

vector

operator - (vector a,vector b)

// 向量*數=向量

vector

operator * (vector a,double p)

//向量/數=向量

vector

operator / (vector a,double p)

bool

operator

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

bool

operator == (const point& a,const point& b)

注意上面的「相等」函式用到了「三態函式」dcmp,減少了精度問題。另外,向量有乙個所謂的極角,即從x軸正半軸旋轉到該方向所需要的角度。c標準庫里的atan2函式就是用來求極角的,如向量(x,y)的極角就是atan2(y,x)(單位:弧度)。

點積:兩個向量v和w的點積等於二者長度的乘積再乘上他們夾角的余弦,即a∗

b=|a

|∗|b

|∗co

sθa ∗b

=|a|

∗|b|

∗cos

θ余弦是偶函式,因此點積滿足交換律。如果兩向量垂直,點積等於0。不難推導出:在平面座標系下,兩個向量oa和ob的點積等於xa

xb+y

ayb xax

b+ya

yb。 下面是點積計算方法,以及利用點積計算向量長度和夾角的函式。

double dot(vector a, vector b)

double lenth(vector a)

double angle(vector a, vector b)

叉積。簡單的說,兩個向量v和w的叉積等於v和w組成的三角形的有向面積的兩倍。什麼叫「有向面積」呢?

順著第乙個向量v看,如果w在左邊,那麼v和w的叉積大於0,否則小於0。如果兩個向量共線(方向相同),那麼叉積等於0(三角形退化成線段)。不難發現,叉積不滿足交換律。事實上,cross(v,w)=-cross(w,v),兩個向量oa和ob的叉積等於xa

yb−x

bya xay

b−xb

ya。**如下:

double cross(vector a, vector b)

double area2(point a, point b,point c)

兩個向量的位置關係。把叉積和點積組合到一起,我們可以更細緻地判斷兩個向量的位置關係。

向量旋轉。向量可以繞起點旋轉,公式為x′

=xco

sa−y

sina

,y′=

xsin

a+yc

osa x′=

xcos

a−ys

ina,

y′=x

sina

+yco

sa其中a為逆時針旋轉的角。**如下:

//rad是弧度

vector rotate(vector a,double rad)

作為特殊情況,下面的函式計算向量的單位法線,即左轉90°以後把長度歸一化。

//呼叫前請確保a不是零向量

vector normal(vector a)

二維幾何模板 二維幾何基礎

二維幾何模板 include include include include include include include include include using namespace std 二維幾何基礎 struct point typedef point vector const doub...

二維幾何基礎

模板 from 紫書 includeusing namespace std typedef long double ld const ld eps 1e 10 const ld pi acos ld 1.0 struct point typedef point vector vector opera...

二維幾何 圓 球

圓是任意一點擁有唯一的圓心角。所以在定義圓的時候,可以加乙個圓心角求座標的函式。首先是輔助巨集 const double eps 1e 10 const double pi acos 1 const double two pi 2 pi const int maxn 100 5 const int ...