2009年3月11日水曜日

Quartz Composer / Bezier Curve Orbit / ベジエ曲線の軌跡計算パッチ

tumblrでこれ(Flashにフォーカス後矢印左右キーで進める)を知り,Quartz Composerのパッチでやってみたいなーと思って忘れていたのをちょっとやってみた.参考はこちら
(Quartz Composerは3次元で描けるんだから奥行き方向の演出のためにこんなこと…みたいに思うかもしれないが基本は「やってみたい」から.というそれだけ.)

まぁ時間を周期内で正規化したのはこんな感じ(こちらを参考).inputPeriodは一周期の秒数みたいなつもり.
double value= (self.inputPeriod==0)?0.0:time/self.inputPeriod;
double abs_double = fabs(value);
int abs_int = (int)abs_double;
double t = abs_double - (double)abs_int;
NSTimeIntervalってdoubleなんだね.

計算したのはこんな感じ.
NSPoint p0= NSMakePoint(self.inputP0X, self.inputP0Y);
NSPoint p1= NSMakePoint(self.inputP1X, self.inputP1Y);
NSPoint p2= NSMakePoint(self.inputP2X, self.inputP2Y);
NSPoint p3= NSMakePoint(self.inputP3X, self.inputP3Y);
double c0= (1-t)*(1-t)*(1-t);
double c1= (1-t)*(1-t)*t;
double c2= (1-t)*t*t;
double c3= t*t*t;
double x= c0*p0.x+3*c1*p1.x+3*c2*p2.x+c3*p3.x;
double y= c0*p0.y+3*c1*p1.y+3*c2*p2.y+c3*p3.y;
NSPointにする必要性はまったくないけどねw.

一応時間依存なのでこんな感じにしてみた.けどよくわかっていない.
+ (QCPlugInTimeMode) timeMode
{
return kQCPlugInTimeModeTimeBase;
}


で,できたので上記のFlashで行われているみたいな感じで色々デコレーションのパッチつけて(編集して)こんな感じ.

(一応Youtubeにあがったがいつまでたっても見れない…投稿してしまうがみれないままかもしれません
追記:フォーマットだか画面サイズだかがわるかったのか撮り直して上げたら結構時間がかかったが表示された.)

別の例:起点と終点が(-0.01, 0), (0.01, 0)として制御点を外側にとった.

0 件のコメント: