編程代碼
新聞詳情

平面坐标旋轉公式推導

發布時(shí)間:2023-04-11 15:40:32 最後更新:2023-04-11 15:44:35 浏覽次數:2371





3D坐标繞軸旋轉公式推導

繞軸旋轉實際上(shàng)等價于(yú)平面點繞遠點旋轉,所以(yǐ)這(zhè)裏隻用分析一(yī / yì /yí)下平面情況就(jiù)可以(yǐ)。

問題轉換爲(wéi / wèi):平面上(shàng)任意點(x,y)繞原點旋轉R度後,新點坐标爲(wéi / wèi)多少?

一(yī / yì /yí)、通常情況,我們容易想到(dào)一(yī / yì /yí)下的(de)推導方式(我一(yī / yì /yí)開始想到(dào)的(de)),請看下圖:

 

綠色的(de)點爲(wéi / wèi)原始點(x,y),轉過r度後到(dào)藍色的(de)點的(de)位置,我一(yī / yì /yí)開始想到(dào)的(de)是(shì)先求出(chū)初始點(綠色的(de)點)的(de)初始角度a,然後計算出(chū)半徑,根據三角關系可以(yǐ)得到(dào)新點的(de)坐标。

關系式:

a=arctan(y/x)
radio=sqrt(x*x+y*y)
新點:x’=radio*Cos(a+r); y’=radio*Sin(a+r)

看起來(lái)貌似可以(yǐ),但是(shì)編程處理旋轉問題時(shí)發現了(le/liǎo)嚴重的(de)問題,在(zài)求a的(de)時(shí)候用了(le/liǎo)x做分母,所以(yǐ)就(jiù)限定了(le/liǎo)x不(bù)等于(yú)0,這(zhè)就(jiù)不(bù)好了(le/liǎo)。

二、直角坐标系求解

思考了(le/liǎo)一(yī / yì /yí)天,不(bù)知道(dào)如何解決分母的(de)問題,突然回想起來(lái)以(yǐ)前學過坐标變換,恍然大(dà)悟,汗一(yī / yì /yí)個(gè)。

還是(shì)需要(yào / yāo)通過幾何關系來(lái)進行求解,可以(yǐ)避免定義域不(bù)連續的(de)問題,無圖無真相!

 

注釋:圖中紅色的(de)點爲(wéi / wèi)初始點,粉色的(de)爲(wéi / wèi)新點,黑色的(de)線爲(wéi / wèi)初始坐标系,紅色的(de)線爲(wéi / wèi)假想坐标系,黃色的(de)線都是(shì)垂線。

在(zài)坐标變換中,我們可以(yǐ)換一(yī / yì /yí)種思考方式,點的(de)旋轉實際上(shàng)可以(yǐ)理解爲(wéi / wèi)坐标系旋轉到(dào)新的(de)位置,然後求到(dào)新點相對于(yú)老坐标系的(de)坐标即可。
圖中我們很容易得到(dào)标注的(de)兩個(gè)角度相等,新點的(de)橫坐标X’等于(yú)下面尺寸标注的(de)X*Cos(φ)-兩條黃色的(de)垂線間的(de)距離,而(ér)這(zhè)段距離我們可以(yǐ)在(zài)紅色的(de)新坐标系中很容易求出(chū)distance=Y * Sin(φ),所以(yǐ)很容易就(jiù)得到(dào)了(le/liǎo)新點的(de)橫坐标

X’=X*Cos(φ)-Y*Sin(φ)          式①

同理,得到(dào)

Y’=X*Sin(φ)+Y*Cos(φ)          式②

式①和(hé / huò)式②就(jiù)是(shì)平面任一(yī / yì /yí)點繞原點旋轉的(de)方程。

對于(yú)3D坐标中,這(zhè)便是(shì)繞Z軸旋轉的(de)公式

X’=X*Cos(φ)-Y*Sin(φ)

Y’=X*Sin(φ)+Y*Cos(φ)

Z’=Z

對于(yú)繞其他(tā)軸旋轉的(de)公式都可以(yǐ)用此方法得到(dào)。

三、

 

采用三角函數展開将會得到(dào)更簡單的(de)求解方法,

X'=Radio*Cos(r+a)
=Radio*(Cos( r)*Cos(a)-Sin( r)*Sin(a))
=Radio*Cos(a)*Cos( r)-Radio*Sin(a)*Sin( r)
=X*Cos( r)-Y*Sin( r)

同理得到(dào)

Y’=Radio*Sin(r+a)
=X*Sin( r)+Y*Cos( r)

看來(lái)真是(shì)要(yào / yāo)溫故而(ér)知新!

 


坐标旋轉公式

x1=cos(angle)*x-sin(angle)*y;

y1=cos(angle)*y+sin(angle)*x;

其中x,y表示物體相對于(yú)旋轉點旋轉angle的(de)角度之(zhī)前的(de)坐标,x1,y1表示物體旋轉angle後相對于(yú)旋轉點的(de)坐标

 

從數學上(shàng)來(lái)說(shuō),此公式可以(yǐ)用來(lái)計算某個(gè)點繞另外一(yī / yì /yí)點旋轉一(yī / yì /yí)定角度後的(de)坐标,例如:A(x,y)繞B(a,b)旋轉β度後的(de)位置爲(wéi / wèi)C(c,d),則x,y,a,b,β,c,d有如下關系式:


1。設A點旋轉前的(de)角度爲(wéi / wèi)δ,則旋轉(逆時(shí)針)到(dào)C點後角度爲(wéi / wèi)δ+β

2。求A,B兩點的(de)距離:dist1=|AB|=y/sin(δ)=x/cos(δ)

3。求C,B兩點的(de)距離:dist2=|CB|=d/sin(δ+β)=c/cos(δ+β)

4。顯然dist1=dist2,設dist1=r所以(yǐ):

r=x/cos(δ)=y/sin(δ)=d/sin(δ+β)=c/cos(δ+β)

5。由三角函數兩角和(hé / huò)差公式知:

sin(δ+β)=sin(δ)cos(β)+cos(δ)sin(β)

cos(δ+β)=cos(δ)cos(β)-sin(δ)sin(β)

所以(yǐ)得出(chū):

c=r*cos(δ+β)=r*cos(δ)cos(β)-r*sin(δ)sin(β)=xcos(β)-ysin(β)

d=r*sin(δ+β)=r*sin(δ)cos(β)+r*cos(δ)sin(β)=ycos(β)+xsin(β)

即旋轉後的(de)坐标c,d隻與旋轉前的(de)坐标x,y及旋轉的(de)角度β有關

 

從圖中可以(yǐ)很容易理解出(chū)A點旋轉後的(de)C點總是(shì)在(zài)圓周上(shàng)運動,圓周的(de)半徑爲(wéi / wèi)|AB|,利用這(zhè)點就(jiù)可以(yǐ)使物體繞圓周運動,即旋轉物體。

 

上(shàng)面公式是(shì)相對于(yú)B點坐标來(lái)的(de),也(yě)就(jiù)是(shì)假如B點位(0,0)可以(yǐ)這(zhè)麽做。現在(zài)給出(chū)可以(yǐ)适合任意情況的(de)公式:

x0 = dx * cos(β) - dy * sin(β)

y0 = dy * cos(β) + dx * sin(β)

 

參數解釋:

x0,y0是(shì)旋轉後相對于(yú)中心點的(de)坐标,也(yě)就(jiù)是(shì)原點的(de)坐标,但不(bù)是(shì)之(zhī)前點旋轉後的(de)實際坐标,還要(yào / yāo)計算一(yī / yì /yí)步,

β旋轉角度,可以(yǐ)是(shì)順時(shí)針或者逆時(shí)針。

dx是(shì)旋轉前的(de)x坐标-旋轉後的(de)x坐标

dy是(shì)旋轉前的(de)y坐标-旋轉後的(de)y坐标

x1=a+x0;

y1=b+y0;

上(shàng)面才是(shì)旋轉後的(de)實際坐标,其中a,b是(shì)原點坐标

 

下面是(shì)上(shàng)面圖的(de)公式解答:

x0=(x-a)*cos(β)-(y-b)*sin(β);

y0=(y-b)*cos(β)+(x-a)*sin(β);

x1=x0+a;

y1=y0+b;

 

在(zài)線客服 雙翌客服
客服電話
  • 0755-23712116
  • 13310869691