2012-11-19 16 views
5

Kullanıcıların üçgen şekli çizmelerine izin vermeye çalışıyorum. Başlangıç ​​noktasını ve bitiş noktasını alıyorum ve üçgeni oluşturmak için eşkenar üçgenin üçüncü noktasını bulmak için formülü kullanıyorum ama bunu nasıl yapabileceğime dair herhangi bir fikrim yok gibi görünüyor? Belki bir daire kullanarak ama bunun hakkında nasıl gideceğimi bilmiyorum. İşte şu anki kodum.Üçgen çizimi

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

Yani sorun bir şey çizmek olmadığını ya da yanlış bir şekle çiziyor olmasıdır? 'Boyut 'nedir? Çekilişin nerede? –

+0

bir üçgeni çizer ama çizdiğim değil .. bir üçgen çizdiğimde – JProg

cevap

9

Bu eşkenar üçgenin üçüncü noktasını hesaplamak için çalışması gerekir:

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

gitmesine izin verdiğimde bir çeşit kayma yapıyor, ama iyi çalışıyor, ama bir önceki üçgenin üzerine binen bir üçgen çizmeye çalıştığımda Çizgiler kesilir ve ekrandan kaybolur – JProg

+0

@JProg: Son 'addLineToPoint' yerine' closePath 'kullanmalısınız, bu kodu cevabım ekledim. - Aksi halde hiç bir fikrim yok, problemi gösteren bir ekran görüntüsü (ve belki de kodunuzun daha fazlası) olmadan söylemek zor. –

+0

bu bir yazdırma ekranına bağlantıdır, yardımın için gerçekten minnettarım! Bu http://postimage.org/image/o7uxeoipb/ – JProg