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回で完了します。

ten_a

Graphic Designer, Scripter and Coder. Adobe Community Professional.

シェアする

コメントを残す