實際做題中我們可能會遇到很多有關及計算幾何的問題,其中有一類問題就是向量的旋轉問題,下面我們來具體**一下有關旋轉的問題。
首先我們先把問題簡化一下,我們先研究乙個點繞另乙個點旋轉一定角度的問題。已知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...
計算幾何學習筆記之旋轉卡殼
旋轉卡殼的用途太廣太廣了,而且每種用途 都大同小異,這裡只簡單介紹一下 畢竟我也沒怎麼寫過 什麼是旋轉卡殼?可以想象成有一雙筷子 筷子是平行的 把凸多邊形夾了起來,然後不停地旋轉,旋轉。旋轉中筷子要麼是緊貼多邊形的邊要麼就是緊貼多邊形的頂點。旋轉卡殼簡介 計算凸多邊形上的最遠點對 又叫直徑 這樣考慮...