Complex Field Computing Library for Extendscript
皆様、いかがお過ごしでしょうか。けっこう暑くなってきましたね。お庭のきゅうりがとても元気で毎朝2,3本収穫しております。そろそろトマトも収穫が始まります。美味しい夏がやってくるw
それは置いておいて、今回のものはIllustratorの座標系を複素平面処理するためのライブラリです。複素数オブジェクトとその四則演算+αをとりあえず用意しております。
AIの座標系を複素平面とみなして処理するためのライブラリです。最新版は以下のGistから入手して下さい。
https://gist.github.com/ten-A/4bf20c54e6c52ffc4230d2a40ab8c9a5
// complex numbers Constructer
function C(r,i){
this.r = r; //real
this.i = i; //imaginally
}
//compute complex value
function Cconj(c){ //conjunction
return new C(c.r, -c.i);
}
function Cadd(c,d){ //add
return new C(c.r+d.r, c.i+d.i);
}
function Csub(c,d){ //sub
return new C(c.r-d.r, c.i-d.i);
}
function Cmul(c,d){ //multi
return new C(c.r*d.r-c.i*d.i, c.r*d.i+c.i*d.r);
}
function Cdiv(c,d){ //division
return new C(
(c.r*d.r+c.i*d.i)/(d.r*d.r+d.i*d.i),
(c.r*d.i-c.i*d.r)/(d.r*d.r+d.i*d.i)
);
}
function Csqrt(c){ //square root
return new C(
Math.sqrt(Math.sqrt(c.r*c.r+c.i*c.i))*Math.cos(Math.atan2(c.i,c.r)/2),
Math.sqrt(Math.sqrt(c.r*c.r+c.i*c.i))*Math.sin(Math.atan2(c.i,c.r)/2)
);
}
使い方
例えば選択したアンカーポイントの移動の場合
まず複素数としてアンカーポイントの座標を登録します。この時x軸は実部y軸は虚数部として下さい。
var a = new C(app.selection[0].pathPoints.anchor[0],app.selection[0].pathPoints.anchor[0]);
同様に移動距離を複素数にて定義します。次の例ではx,y共に10mmの移動です。
var b = new C(10,10);
演算はファンクションに引き渡すだけ。ファンクションからは複素数オブジェクトが帰ります。
var c = Cadd(a,b);
あとはアンカーの位置を実部をx軸に虚数部をy軸に当てはめてやればOK。
app.selection[0].pathPoints.anchor = [c.r,c.i];
この様に通常x,yについてそれぞれ別計算が必要ですが、複素数として扱うと計算が1回で完了します。