これをストロークにして描けるようになりたいです。これをできるだけ効率的に行うにはどうすればよいでしょうか。その場で描画するには、CGPatternRef を考えていましたが、その方法が本当にわかりません。
編集:
パスにワープする必要はありません。Illustratorでその問題を修正できませんでした。
これをストロークにして描けるようになりたいです。これをできるだけ効率的に行うにはどうすればよいでしょうか。その場で描画するには、CGPatternRef を考えていましたが、その方法が本当にわかりません。
編集:
パスにワープする必要はありません。Illustratorでその問題を修正できませんでした。
Apple doc は役に立ちますか?
Quartz 2D Programming Guide、 How Patterns Work、または Patterns in generalのセクションを参照してください。
(上記のドキュメントから) 開始点を描画する方法は次のとおりです。PSIZE は星のサイズです。
static void MyDrawStencilStar (void *info, CGContextRef myContext)
{
int k;
double r, theta;
r = 0.8 * PSIZE / 2;
theta = 2 * M_PI * (2.0 / 5.0); // 144 degrees
CGContextTranslateCTM (myContext, PSIZE/2, PSIZE/2);
CGContextMoveToPoint(myContext, 0, r);
for (k = 1; k < 5; k++) {
CGContextAddLineToPoint (myContext,
r * sin(k * theta),
r * cos(k * theta));
}
CGContextClosePath(myContext);
CGContextFillPath(myContext);
}
曲線変換を追加して、各ポイントで星を描くだけです。
以下は、3 次ベジエ曲線上の点を計算する単純な C コードです。
Illustratorドキュメントをこのアプリケーションにインポートしてみてください:Opacity、そして「ソースコードとしてエクスポート」を実行します。
詳細については、http://likethought.com/opacity/workflow/を参照してください。
パスを歩き、等距離で (パスに沿って) 曲線の座標を計算する必要があります。これは安価です。回転は少し毛むくじゃらになりますが (接線を中心に回転)、全体として、これは基本的なベジエ曲線の問題です。単純に曲線方程式を解いて、各頂点で星をレンダリングします。
すべてを実行できるビルトインはありません。交点の点を照会できますが、曲線を解決するのはレンダリングだけです。これは CoreGraphics によってカプセル化されているため、それを引き出したり、既存のものを利用したりすることはできません。
これは、自分で書くことを検討する必要があるものです。難しいことではありません。本音。微積分の基本的な理解だけが必要です...もしあれば。自分で書く場合は、必要に応じてワープ効果を追加することもできます.
これは OpenGL の仕事のようです。CoreGraphics は、パスへの近さに応じて星をワープする簡単な方法を提供していません。