2016-09-18 9 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

あなたのコメントから、特定のローテーションの5つの円の中心の座標を決定したいと思われるようです。センターはすべて円になります。だからあなたの質問は、半径の円にある点の座標は、どのような角度になるのでしょうか?θです。サークルのためのパラメトリック方程式はあなたにそれを与える:

X = R COS θ

Y = Rθ

角度、θ、これらの中で方程式は、反時計回りの方向に正のx軸からラジアンで測定されます。

360度= 2 πラジアン

残りの単純な数学で、回転のあなたの角度を取る:あなたの角度は度である場合は、としてπ便利なためM_PI定数がわかります(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及びSiNからだ場合)。

関連する問題