2016-09-18 112 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和罪恶过的)。