2012-11-19 10 views
5

Próbuję umożliwić użytkownikom rysowanie trójkąta. Dostaję punkt początkowy i punkt końcowy i używając wzoru, aby znaleźć trzeci punkt trójkąta równobocznego, aby utworzyć trójkąt, ale wydaje mi się, że nie działa jakikolwiek pomysł, jak to zrobić? Może za pomocą koła, ale nie wiem, jak to zrobić. Oto mój obecny kod.Rysowanie trójkąta

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

Tak więc problem jest to, że nie wyciąga nic lub że jest to rysunek zły kształt? Czym jest "rozmiar"? Gdzie jest twój losowanie? –

+0

rysuje trójkąt, ale nie jest to ten, który rysuję ... robi pewną zmianę, kiedy puściłem go – JProg

Odpowiedz

9

To powinno działać, aby obliczyć trzeci punkt trójkąta równobocznego:

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

kiedy rysuję trójkąt teraz działa dobrze, ale kiedy próbuję narysować kolejny trójkąt, który zachodzi na poprzedni linii zostanie odcięta i zniknie z ekranu – JProg

+0

@JProg: Powinieneś użyć 'closePath' zamiast ostatniego' addLineToPoint', dodałem ten kod do mojej odpowiedzi. - W przeciwnym razie nie mam pojęcia, trudno powiedzieć bez zrzutu ekranu demonstrującego problem (i być może więcej twojego kodu). –

+0

to jest link do ekranu drukowania, naprawdę doceniam twoją pomoc! każdy pomysł, co może być przyczyną tego http://postimage.org/image/o7uxeoipb/ – JProg