少高潮爽了在观看奂费_奶水无码专区_欧美亚洲三级日韩_91精品国产综合香蕉_秋霞伦理电影在线_GOGO亚洲肉体艺术欣赏图片_一本一道a√无码中文字幕_免费看一级毛片无码区_内射视频网站在线观看_国产激情视频精品中文

編程代碼
新聞詳情

平面坐標(biāo)旋轉(zhuǎn)公式推導(dǎo)

發(fā)布時(shí)間:2023-04-11 15:40:32 最后更新:2023-04-11 15:44:35 瀏覽次數(shù):1407





3D坐標(biāo)繞軸旋轉(zhuǎn)公式推導(dǎo)

繞軸旋轉(zhuǎn)實(shí)際上等價(jià)于平面點(diǎn)繞遠(yuǎn)點(diǎn)旋轉(zhuǎn),所以這里只用分析一下平面情況就可以。

問(wèn)題轉(zhuǎn)換為:平面上任意點(diǎn)(x,y)繞原點(diǎn)旋轉(zhuǎn)R度后,新點(diǎn)坐標(biāo)為多少?

一、通常情況,我們?nèi)菀紫氲揭幌碌耐茖?dǎo)方式(我一開(kāi)始想到的),請(qǐng)看下圖:

 

綠色的點(diǎn)為原始點(diǎn)(x,y),轉(zhuǎn)過(guò)r度后到藍(lán)色的點(diǎn)的位置,我一開(kāi)始想到的是先求出初始點(diǎn)(綠色的點(diǎn))的初始角度a,然后計(jì)算出半徑,根據(jù)三角關(guān)系可以得到新點(diǎn)的坐標(biāo)。

關(guān)系式:

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

看起來(lái)貌似可以,但是編程處理旋轉(zhuǎn)問(wèn)題時(shí)發(fā)現(xiàn)了嚴(yán)重的問(wèn)題,在求a的時(shí)候用了x做分母,所以就限定了x不等于0,這就不好了。

二、直角坐標(biāo)系求解

思考了一天,不知道如何解決分母的問(wèn)題,突然回想起來(lái)以前學(xué)過(guò)坐標(biāo)變換,恍然大悟,汗一個(gè)。

還是需要通過(guò)幾何關(guān)系來(lái)進(jìn)行求解,可以避免定義域不連續(xù)的問(wèn)題,無(wú)圖無(wú)真相!

 

注釋?zhuān)簣D中紅色的點(diǎn)為初始點(diǎn),粉色的為新點(diǎn),黑色的線為初始坐標(biāo)系,紅色的線為假想坐標(biāo)系,黃色的線都是垂線。

在坐標(biāo)變換中,我們可以換一種思考方式,點(diǎn)的旋轉(zhuǎn)實(shí)際上可以理解為坐標(biāo)系旋轉(zhuǎn)到新的位置,然后求到新點(diǎn)相對(duì)于老坐標(biāo)系的坐標(biāo)即可。
圖中我們很容易得到標(biāo)注的兩個(gè)角度相等,新點(diǎn)的橫坐標(biāo)X’等于下面尺寸標(biāo)注的X*Cos(φ)-兩條黃色的垂線間的距離,而這段距離我們可以在紅色的新坐標(biāo)系中很容易求出distance=Y * Sin(φ),所以很容易就得到了新點(diǎn)的橫坐標(biāo)

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

同理,得到

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

式①和式②就是平面任一點(diǎn)繞原點(diǎn)旋轉(zhuǎn)的方程。

對(duì)于3D坐標(biāo)中,這便是繞Z軸旋轉(zhuǎn)的公式

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

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

Z’=Z

對(duì)于繞其他軸旋轉(zhuǎn)的公式都可以用此方法得到。

三、

 

采用三角函數(shù)展開(kāi)將會(huì)得到更簡(jiǎn)單的求解方法,

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)

同理得到

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

看來(lái)真是要溫故而知新!

 


坐標(biāo)旋轉(zhuǎn)公式

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

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

其中x,y表示物體相對(duì)于旋轉(zhuǎn)點(diǎn)旋轉(zhuǎn)angle的角度之前的坐標(biāo),x1,y1表示物體旋轉(zhuǎn)angle后相對(duì)于旋轉(zhuǎn)點(diǎn)的坐標(biāo)

 

從數(shù)學(xué)上來(lái)說(shuō),此公式可以用來(lái)計(jì)算某個(gè)點(diǎn)繞另外一點(diǎn)旋轉(zhuǎn)一定角度后的坐標(biāo),例如:A(x,y)繞B(a,b)旋轉(zhuǎn)β度后的位置為C(c,d),則x,y,a,b,β,c,d有如下關(guān)系式:


1。設(shè)A點(diǎn)旋轉(zhuǎn)前的角度為δ,則旋轉(zhuǎn)(逆時(shí)針)到C點(diǎn)后角度為δ+β

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

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

4。顯然dist1=dist2,設(shè)dist1=r所以:

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

5。由三角函數(shù)兩角和差公式知:

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

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

所以得出:

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

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

即旋轉(zhuǎn)后的坐標(biāo)c,d只與旋轉(zhuǎn)前的坐標(biāo)x,y及旋轉(zhuǎn)的角度β有關(guān)

 

從圖中可以很容易理解出A點(diǎn)旋轉(zhuǎn)后的C點(diǎn)總是在圓周上運(yùn)動(dòng),圓周的半徑為|AB|,利用這點(diǎn)就可以使物體繞圓周運(yùn)動(dòng),即旋轉(zhuǎn)物體。

 

上面公式是相對(duì)于B點(diǎn)坐標(biāo)來(lái)的,也就是假如B點(diǎn)位(0,0)可以這么做。現(xiàn)在給出可以適合任意情況的公式:

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

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

 

參數(shù)解釋?zhuān)?/p>

x0,y0是旋轉(zhuǎn)后相對(duì)于中心點(diǎn)的坐標(biāo),也就是原點(diǎn)的坐標(biāo),但不是之前點(diǎn)旋轉(zhuǎn)后的實(shí)際坐標(biāo),還要計(jì)算一步,

β旋轉(zhuǎn)角度,可以是順時(shí)針或者逆時(shí)針。

dx是旋轉(zhuǎn)前的x坐標(biāo)-旋轉(zhuǎn)后的x坐標(biāo)

dy是旋轉(zhuǎn)前的y坐標(biāo)-旋轉(zhuǎn)后的y坐標(biāo)

x1=a+x0;

y1=b+y0;

上面才是旋轉(zhuǎn)后的實(shí)際坐標(biāo),其中a,b是原點(diǎn)坐標(biāo)

 

下面是上面圖的公式解答:

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

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

x1=x0+a;

y1=y0+b;

 

在線客服 雙翌客服
客服電話
  • 0755-23712116
  • 13822267203