2016-09-18 73 views
0

我有5個子視圖(白色)添加到超級視圖(灰色),當我旋轉超級視圖時,我想知道每個子視圖的角度(如1和2)紅色圓圈(子視圖的中心,並且紅色圓圈是在同一圓)獲取旋轉超級視圖後的實際角度

開始位置: enter image description here

旋轉位置: enter image description here

enter image description here

+1

我認爲你需要提供更多的信息,因爲A的角度只是旋轉的角度,E的角度始終是72度。 – CRD

+0

感謝您的回覆,角度AOE恰好是360/5 = 72度。當灰度視圖旋轉角度1(角度1可以是任何-180〜180度)時,我需要知道點A的位置(A是該子視圖的中心點)以及其他點如B,C,D和E 。 – Meonardo

回答

0

從您的評論中,您似乎想要確定給定旋轉的五個圓的中心座標。這些中心都會躺在一個圓圈上。所以你的問題歸結爲圓上一個點的座標是多少?r對於角度θ。對於圓形的參數方程給你:

X = - [R COS θ

Ŷ = - [Rθ

的角度,θ,在這些方程是在逆時針方向從正x軸測量的弧度。如果你的角度爲度,你會發現M_PI常數π有用:

360度= 2個π弧度

剩下的就是簡單的數學,把你的旋轉角度給你A的角度(記住調整0爲x軸,如果需要逆時針測量),其他中心是72度的倍數(0.4 π弧度)。

HTH

0

我不知道我完全理解你的問題,但如果你只是需要採取已知點並旋轉一定度數,檢查出的文檔的CGAffineTransform

例如:

CGAffineTransform rotation = CGAffineTransformMakeRotation (angle); 
CGPoint rotatedPoint = CGPointApplyAffineTransform (startingPoint, rotation); 

這個旋轉矩陣大約是(0,0),角弧度,所以你需要減去你的上海華邊界的中心得到一個相對偏移中心,做旋轉,並加回中心。或者你可以建立由翻譯,旋轉和反轉換組成的仿射變換,然後將其應用到上面的起點。

0

鑑於你已經知道主旋轉角度,這會給你在-180範圍內的角度。每個白盤的+180和立場:

GCFloat toRads = M_PI/180.0; 

CGFloat angleA = self.rotationInDegrees; 
if (angleA > 180) angleA -= 360; 
CGFloat xA = self.radius * sinf(angleA * toRads); 
CGFloat yA = self.radius * cosf(angleA * toRads); 

CGFloat angleB = angleA + 72; 
if (angleB > 180) angleB -= 360; 
CGFloat xB = self.radius * sinf(angleB * toRads); 
CGFloat yB = self.radius * cosf(angleB * toRads); 

etc... 

(這裏假設你的零度是從垂直如果從水平交換COS和罪惡過的)。