2012-11-19 4 views
5

사용자가 삼각형 모양을 그리도록 허용하고 있습니다. 시작점과 끝점을 얻고 수식을 사용하여 등변 삼각형의 세 번째 점을 찾아 삼각형을 만듭니다.하지만 어떻게하면이 일을 할 수있는 아이디어가없는 것 같습니까? 어쩌면 원을 사용하고 있을지 모르지만 나는 그것에 대해 어떻게 해야할지 잘 모릅니다. 여기에 현재 코드가 있습니다.삼각형 그리기

NSValue *point = [_path objectAtIndex:0]; 
CGPoint startPoint = point.CGPointValue; 

point = [_path lastObject]; 
CGPoint endPoint = point.CGPointValue; 

CGPoint thirdPoint = CGPointMake(((startPoint.x+endPoint.x)/2), (((startPoint.x-endPoint.x)/2)*(tan(60))+1)); 
UIBezierPath *triangle = [UIBezierPath bezierPath]; 
[triangle moveToPoint:startPoint]; 
[triangle addLineToPoint:endPoint]; 
[triangle addLineToPoint:thirdPoint]; 
[triangle addLineToPoint:startPoint]; 
triangle.lineWidth=size; 
+0

그래서 문제가 아무것도 그리지 않습니다하거나 잘못된 모양을 그리는 것이다? '크기'란 무엇입니까? 무승부 전화는 어디 있습니까? –

+0

그것은 삼각형을 그리지 만 그 중 하나는 내가 그려지지 않습니다. 그것은 그것이 이동하게했을 때 어떤 종류의 변화를합니다. – JProg

답변

9

이 정삼각형의 세 번째 지점을 계산하기 위해 작동합니다 :

CGPoint startPoint = ..., endPoint = ...; 

CGFloat angle = M_PI/3; // 60 degrees in radians 
// v1 = vector from startPoint to endPoint: 
CGPoint v1 = CGPointMake(endPoint.x - startPoint.x, endPoint.y - startPoint.y); 
// v2 = v1 rotated by 60 degrees: 
CGPoint v2 = CGPointMake(cosf(angle) * v1.x - sinf(angle) * v1.y, 
         sinf(angle) * v1.x + cosf(angle) * v1.y); 
// thirdPoint = startPoint + v2: 
CGPoint thirdPoint = CGPointMake(startPoint.x + v2.x, startPoint.y + v2.y); 

UIBezierPath *triangle = [UIBezierPath bezierPath]; 
[triangle moveToPoint:startPoint]; 
[triangle addLineToPoint:endPoint]; 
[triangle addLineToPoint:thirdPoint]; 
[triangle closePath]; 
// ... 
+0

삼각형을 그릴 때 이제는 잘 작동하지만, 이전 삼각형을 겹쳐 쓰는 다른 삼각형을 그리려고 할 때 줄이 끊어져 화면에서 사라진다. – JProg

+0

@JProg : 마지막'addLineToPoint' 대신'closePath'를 사용해야한다. 나는 그 코드를 내 대답에 추가했다. - 그렇지 않으면 난 전혀 모른다. 문제를 보여주는 스크린 샷없이 (그리고 아마도 코드가 더) 말하기는 어렵다. –

+0

이것은 인쇄 화면에 대한 링크입니다. 정말 감사드립니다! 어떤 생각이 원인이 될 수 있습니다 http://postimage.org/image/o7uxeoipb/ – JProg