計算幾何之向量旋轉

2021-06-29 14:55:42 字數 2567 閱讀 2148

實際做題中我們可能會遇到很多有關及計算幾何的問題,其中有一類問題就是向量的旋轉問題,下面我們來具體**一下有關旋轉的問題。

首先我們先把問題簡化一下,我們先研究乙個點繞另乙個點旋轉一定角度的問題。已知a點座標

(x1,y1),b

點座標(x2,y2)

,我們需要求得

a點繞著

b點旋轉θ度後的位置。

a點繞b點旋轉θ角度後得到的點,問題是我們要如何才能得到a' 

點的座標。(向逆時針方向旋轉角度正,反之為負)研究乙個點繞另乙個點旋轉的問題,我們可以先簡化為乙個點繞原點旋轉的問題,這樣比較方便我們的研究。之後我們可以將結論推廣到一般的形式上。

令b是原點,我們先以

a點向逆時針旋轉為例,我們過

a' 做

ab的垂線,交ab於

c,過c做

x軸的平行線交過

a' 做

x軸的垂線於

d。過點c做

x軸的垂線交

x軸於點e。

令a的座標(x,y)

,a' 

座標(x1,y1),b

的座標(0,0)

。我們可以輕鬆的獲取

ab的長度,而且顯而易見

a' b

長度等於

ab。假設我們已知θ角的大小那麼我們可以很快求出bc和

a' c

的長度。

bc=a' b x cos

θ,a' c=a' b x sinθ。

因為∠a' cb

和∠dce

為直角(顯然的結論),則∠

a' cd +

∠dcb =

∠ecd +

∠dcb=90度。

則∠a' cd=

∠ecd

,∠a' dc=

∠ceb=90

度,因此可以推斷⊿

ca' d 

∽⊿cbe

。由此可以退出的結論有:

bc/be=a' c/a' d和

bc/ce=a' c/cd

當然了dc

和a' d

都是未知量,需要我們求解,但是我們卻可以通過求出

c點座標和

e點座標間接獲得

a' c和cd

的長度。我們應該利用相似的知識求解

c點座標。

c點橫座標等於:

((|ab| x cos

θ) / |ab|) * x = x*cosθ

c點縱座標等於:

((|ab| x cos

θ) / |ab|) * y = y*cosθ

則ce和

be的的長度都可以確定。

我們可以通過相⊿ca' d 

∽⊿cbe

得出:

ad =  x * sinθ         

dc = y * sinθ

那麼接下來很容易就可以得出:

x1 =  x*cosθ

- y * sin

θ     

y1 = y*cos

θ + x * sinθ

則a' 

的座標為

(x*cos

θ- y * sin

θ, y*cos

θ + x * sinθ)

我們可以這樣認為:對於任意點a(x,y),a

非原點,繞原點旋轉θ角後點的座標為:

(x*cos

θ- y * sin

θ, y*cos

θ + x * sinθ)

接下來我們對這個結論進行一下簡單的推廣,對於任意兩個不同的點a和b

(對於求點繞另乙個點旋轉後的座標時,

a b重合顯然沒有太大意義),求a點繞

b點旋轉θ角度後的座標,我們都可以將

b點看做原點,對a和

b進行平移變換,計算出的點座標後,在其橫縱座標上分別加上原

b點的橫縱座標,這個座標就是

a' 的座標。

推廣結論:對於任意兩個不同點a和b

,a繞b

旋轉θ角度後的座標為:

(δx*cosθ- 

δy * sin

θ+ xb, 

δy*cos

θ + 

δx * sin

θ+ yb ) 

注:xb、yb

為b點座標。

結論的進一步推廣:對於任意非零向量ab

(零向量研究意義不大),對於點

c進行旋轉,我們只需求出點a和

b對於點

c旋轉一定角度的座標即可求出旋轉後的向量

a' b' 

,因為向量旋轉後仍然是一條有向線段。同理,對於任意二維平面上的多邊形旋轉也是如此。

下面給個題目,山東省賽a題

題意:按照逆時針給出a,b的座標,求逆時針求c點座標座標使a,b,c三點成為等邊三角形

思路:直接套公式,就是b,繞a點旋轉60度以後的點

#include #include #include using namespace std;

int main()

return 0;

}

計算幾何之旋轉卡殼

大佬部落格直通車 根據凸包上的邊的最遠點隨著邊逆時針轉動,一起逆時針轉動的性質,使用計算幾何的一些方法進行旋轉遍歷。例題1 二維平面上有若干個點,求該平面上最遠的兩個點的距離 首先,這兩個點一定凸包上。很容易想到個o n2 的演算法,暴力列舉凸包上的每兩點即可,想想更好的演算法。乙個我證明不來的定理...

計算幾何基礎 點 向量

附上乙個講極角排序還不錯的部落格 struct point point double x,double y x x y y point operator const point a const 叉積 0是指兩向量平行 重合 point operator const point a const dou...

計算幾何學習筆記之旋轉卡殼

旋轉卡殼的用途太廣太廣了,而且每種用途 都大同小異,這裡只簡單介紹一下 畢竟我也沒怎麼寫過 什麼是旋轉卡殼?可以想象成有一雙筷子 筷子是平行的 把凸多邊形夾了起來,然後不停地旋轉,旋轉。旋轉中筷子要麼是緊貼多邊形的邊要麼就是緊貼多邊形的頂點。旋轉卡殼簡介 計算凸多邊形上的最遠點對 又叫直徑 這樣考慮...