2016-09-18 3 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을 왜냐하면 θ

Y = Rθ

각도 , θ 방정식은 반 시계 방향으로 양의 x 축으로부터 라디안으로 측정됩니다. 나머지는 간단한 수학, 회전하여 각도를 가지고있다 = 2 π 라디안

360도 : 당신의 각도도에 있다면 당신은 π 유용한의 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... 

(이 수직에서 당신의 0도 가정이 수평 스왑 COS와 죄에서라면.).

관련 문제