Siteswap.separate()

separate() メソッドは、サイトスワップデータを解析して道具ごとの投げ方データを返します。例えばサイトスワップが 531 なら、3個の道具 A, B, C は各時刻において次の表のように投げられます。

時刻01234567891011
右手A C B A C B 
左手 B C A B C A

このとき道具ごとに見てみると

ということが分かります。これらが「道具ごとの投げ方データ」です。

構文

separate(throws, sync)

引数

throws
サイトスワップを表す数値配列の配列です。analyze() の返値の throws プロパティをそのまま渡すことができます。
sync
サイトスワップがシンクロなら true を、それ以外なら false を指定します。analyze() の返値の sync プロパティをそのまま渡すことができます。

返値

以下のようなプロパティを持ったオブジェクトの配列を返します。配列の大きさは道具の個数です。

length
1周期の長さです。この道具を最初に投げてから、再び同じ手の同じ状態に戻るまでの投げる回数を表します。numbers および times の配列の大きさと一致します。
numbers
1周期分の投げる高さを表す整数の配列です。シンクロの場合 x の代わりにマイナスが付きます。例えば 4x なら -4 です。
start
最初に投げる時刻を表す 0 以上の整数です。
times
1周期分の投げる時刻を表す 1 以上の整数の配列です。シンクロの場合 x が付く数字は奇数に変換されますが、左側の数字には +1、右側の数字には -1 が加えられます。例えば (4x,2x) の 4x なら 5、2x なら 1 です。それ以外は numbers の値と同じになります。

const result = jmotion.Siteswap.analyze("(4x,2x)");
const table = jmotion.Siteswap.separate(result.throws, result.sync);

// table = [
//     {
//         "length": 2,
//         "numbers": [-4, -2],
//         "start": 0,
//         "times": [5, 1],
//     },
//     {
//         "length": 2,
//         "numbers": [-2, -4],
//         "start": 1,
//         "times": [1, 5],
//     },
//     {
//         "length": 2,
//         "numbers": [-2, -4],
//         "start": 3,
//         "times": [1, 5],
//     },
// ]