2012-10-27 2 views
1

3 개의 CG 포인트가 있으며 각도를 계산하고 싶습니다.3 개의 CG 포인트와 각도 계산

내가 조금 스키마 그려

:이 코드를 시도

enter image description here

:

CGPoint u ; 
     u.x = 0; 
     u.y = - middleRectY; 

     CGPoint v ; 
     v.x = x1 - middelRectX; 
     v.y = y1 - middleRectY; 

     // formule = u.v/(||u|| * ||v||) 

     double cosa = (double)((u.x * v.x + u.y * v.y))/sqrt(u.x * u.x + u.y * u.y) * sqrt(v.x * v.x + v.y * v.y); 

     // angle en degré 

     double angle = (180.0/M_PI) * acos(cosa); 

     // Signe de l'angle 

     int sign = (u.x * v.y - u.y * v.x) > 0 ? 1 : -1; 

     rectYellow.transform = CGAffineTransformMakeRotation(angle*sign); 

하지만 내 함수 반환 "유모"/

들으 :)

+0

NaN을 정확히 반환하는 것은 무엇입니까? 어떤 기능이 있습니까? – WDUK

+0

NSLog (@ "% f", 각도)로 테스트하면 콘솔은 "nan"을 반환합니다. – VivienCormier

답변

0

문제점을 발견했습니다!

double cosa = ((u.x * v.x) + (u.y * v.y))/(sqrt((u.x * u.x) + (u.y * u.y)) * sqrt((v.x * v.x) + (v.y * v.y))); 

나는 이유를 이해하지 않습니다

그것은 괄호 단지 probleme

? 괄호가 곱셈에 필요하지 않기 때문에 ...

+0

'((u.x * v.x + u.y * v.y))'에 괄호가 너무 많아서 연산자의 우선 순위가 문제가 아닌 것으로 보입니다. – WDUK

+1

@VivienCormier - 원본이 A/B * C 형식이고 수정본이 A/(B * C) 형식이며 그 두 개는 동일하지 않습니다 (C가 1이 아닌 경우). – CRD