2012-11-19 30 views
5

ユーザーが三角形を描画できるようにしようとしています。私は開始点と終了点を取得しているし、三角形を作成する正三角形の3番目の点を見つけるために数式を使用していますが、私はこれを行うことができますどのようなアイデアを働いているようですか?多分サークルを使用しているかもしれませんが、私はそれについてどうやって行くのか分かりません。ここに私の現在のコードです。三角形を描く

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

関連する問題