2010-12-13 13 views
10

私は今日のさまざまな時点で太陽の座標に基づいてプログラマチックにCGPathRefを構築したいと考えています。ポイントを計算することは問題ではありませんが、私はCGPathRefを滑らかにして、CGPathAddCurveToPointが適切であると思っています。CGPathAddCurveToPointのパラメータは何を意味しますか?

私はpath、transform、x、yパラメータについて理解していますが、他のパラメータについてはわかりません。アップルのドキュメントによれば、それらはコントロールポイントであり、私はそれらがあなたが曲線をポイントを通過する方法を調整できるベクトル描画プログラムで見るようなものだと推測しています。

私の質問は、私の座標に関係するポイントを、それらの座標が前もって何かを知らずに選ぶ方法です。私はおそらく、最初のコントロールポイントのそれぞれから設定された量を減算し、同じ量を2番目のコントロールポイントに追加すると考えていますが、それは私に単純化されて聞こえます。スムーズなカーブに合ったコントロールポイントを生成するための標準的な方法はありますか?

void CGPathAddCurveToPoint (
    CGMutablePathRef path, 
    const CGAffineTransform *m, 
    CGFloat cp1x, 
    CGFloat cp1y, 
    CGFloat cp2x, 
    CGFloat cp2y, 
    CGFloat x, 
    CGFloat y 
); 
+0

からのコメントを組み込むための答えを更新しましたコアグラフィックスで使用されているものとは異なります。パスが(a1、p1、b1)、(a2、p2、b2)、...]の場合、piはポイント、aiは視覚的に接続されたコントロールポイントです。コアグラフィックスの同等のパスが開始されます[(b1、p2、a2)、...](p1のmoveToPointの後)。私はこれが誰かに役立つことを願っています。 – mrueg

答えて

6

余分なポイントは、(一般的な説明のためhttp://en.wikipedia.org/wiki/Bézier_curveを参照)ソース(電流)点と目標点への曲線のうち曲線のベジエ制御点です。 line currentX、currentY - cp1x、cp1yは現在の点のベクトル 'out'であり、cp2x、cp2y - x、yは最終点までの 'in'ベクトルです。 P1からP2に滑らかな曲線を生成する

合理的な方法(P0、P1、P2、P3 4点を想定)は、(擬似コード)である:出発点について

v = (strength of curve from 0.0 to 1.0) 
cp1x = p1.x+v*(p1.x-p0.x) 
cp1y = p1.y+v*(p1.y-p0.y) 
cp2x = p2.x-v*(p3.x-p2.x) 
cp2y = p2.y-v*(p3.y-p2.y) 

、cp1xを設定するcp1y始点x、y、および終点については、cp2x、cp2yを終点x、yに設定します。

注:このようなIllustratorなどのベクターグラフィックスソフトウェアに使用されている場合は、コントロールポイントの意味が少しある:この問題を持っている間、私はこの質問を見つけたので、私は

ughoavgfhw
+2

Denisはコントロールポイントであると書いていますが、使い方は間違っています。 cp1x、cp1yはCURRENT点のベクトルOUTを与え、cp2x、xp2yは点x、yにベクトルINTOを与えます。また、最後と次の点を使用すると、おそらく直線が得られます。申し訳ありませんが、実際にポイントを計算する方法はわかりませんが、代わりにCGPathAddArcToPointを試すことをおすすめします。 – ughoavgfhw

関連する問題