11

CGPathRef1日のさまざまな時点での太陽の座標に基づいて、プログラムで構築したいと考えています。ポイントの計算は問題ありませんが、CGPathRefスムーズCGPathAddCurveToPointで適切だと思われるものを作りたいと思っています。

path、transform、x および y パラメーターは理解していますが、他のパラメーターについてはわかりません。Apple のドキュメントによると、これらは制御点であり、曲線が点を通過する方法を調整できるベクトル描画プログラムで見られるようなものだと思います。

私の質問は、それらの座標が事前に何であるかを知らずに、座標に関連するポイントを選択する方法ですか? 最初の各コントロール ポイントから一定量を差し引いて、2 番目のコントロール ポイントに同じ量を追加するだけでよいのではないかと考えていますが、それは単純化されすぎているように思えます。滑らかな曲線に「意味のある」制御点を生成する標準的な方法はありますか?

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

1 に答える 1

7

追加のポイントは、ソース(現在の)ポイントからのカーブとターゲットポイントへのカーブのベジェコントロールポイントです(一般的な説明については、 http://en.wikipedia.org/wiki/Bézier_curveを参照してください)。線currentX、currentY --cp1x、cp1yは、現在の点からのベクトル「out」であり、cp2x、cp2y --x、yは、最終点へのベクトル「in」です。

p1からp2までの滑らかな曲線を作成するための合理的な方法(4つのポイントp0、p1、p2、p3を想定)は(擬似コード)です。

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に設定します。

注:ughoavgfhwからのコメントを組み込むために回答を更新しました

于 2010-12-13T18:35:45.180 に答える