2012-11-19 19 views
5

Sto cercando di consentire agli utenti di disegnare una forma triangolare. Sto ottenendo il punto di partenza e il punto finale e usando la formula per trovare il terzo punto di un triangolo equilatero per creare il triangolo ma sembra che non stia lavorando su nessuna idea su come posso farlo? Forse usando un cerchio ma non so come farlo. Ecco il mio codice attuale.Disegno di un triangolo

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

Quindi il problema è che non disegnare qualcosa o che si tratta di disegnare una forma sbagliata? Che cos'è 'size'? Dov'è il tuo richiamo dell'estrazione? –

+0

disegna un triangolo ma non è quello che disegno .. fa un qualche tipo di spostamento quando lo lascio andare – JProg

risposta

9

Questo dovrebbe funzionare per calcolare il terzo punto di un triangolo equilatero:

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

quando disegno un triangolo ora funziona bene, ma quando provo a disegnare un altro triangolo che si sovrappone a quello precedente delle linee vengono troncate e scompaiono dallo schermo – JProg

+0

@JProg: dovresti usare 'closePath' invece dell'ultimo' addLineToPoint', ho aggiunto quel codice alla mia risposta. - Altrimenti non ne ho idea, è difficile dire senza uno screenshot che mostri il problema (e forse più del tuo codice). –

+0

questo è un collegamento a una schermata di stampa, apprezzo molto il tuo aiuto! Qualche idea su cosa potrebbe causare questo http://postimage.org/image/o7uxeoipb/ – JProg