見出し画像

正しい53してますか-小数サイトスワップの話-

アドベントカレンダー15日分を担当します。
https://adventar.org/calendars/5474

53に関する疑問から始めて小数のサイトスワップについてお話します。​

1. 導入

 まず、みなさんは正しい53をやったことがありますか。
正しい53は、左右均等なリズムで5の高さは3の高さの4倍です。

普通にやると左右のリズムはタタンタタンとなって、高さも気持ち差があるぐらいになると思います。
逆にさらに5を低く、3を高くして同じ高さに近づけていくと、左右同時に投げる(4x,4x)になるはずです。

画像1

 ここで疑問となるのは、各スローの高さを変えたときにリズムはどう変わるのでしょうか。
そこをうまくサイトスワップ的に予測できないでしょうか。

2. 普通のサイトスワップ

 そもそも普通のアシンクロサイトスワップの表記(53とか88441とか)では以下の暗黙の過程があります。
 ①左右の投げる間隔(インターバル)が1
  →つまり高さ1のスローを右手で投げると次の左手のスローで使える
 ②左右交互(手が2本の場合)
 ③奇数はクロス、偶数はセルフ
今回の現象を分析するためには①のインターバル1の前提を取り除き、各スローごとで可変にする必要があります。
また、その際インターバルを0.3や1.5など小数を認めることにします。

 結論として、冒頭で話したリズムのずれた53は4.5、3.5でそのインターバル(投げ方)を
「右で4.5をクロスで投げた後に0.5待って、左で3.5をクロスで投げた後、1.5待つ」(以下ループ)
とするとジャグリング可能となります。

3. 表記法(提案)

 小数を認めるサイトスワップについて説明する前に、先ほどのカッコ内のような説明では表現しづらいので以下のようなルールでサイトスワップを表記したいと思います。
 ①1つのスローについて、高さ、セルフ(s)orクロス(x)、その投げの後のインターバルの順で書く
  例、「4.5x0.5」、「5s0.3」
 ②サイトスワップは①のスローをスペース区切りで書く
 ③サイトスワップは前から右左交互に投げることとする。
この表記法では2で説明したサイトスワップは「4.5x0.5 3.5x1.5」と書けます。

4. ジャグリング可能性

 普通のサイトスワップでのジャグリング可能性判定の1つとして、次のようなやり方があります。
①あるスローについて、その高さ分の状態を持っているとする
②そのスローを前に1つ進めて状態から1を引く
③最後まで行ったら先頭に戻る
④0になった時の場所をチェック
⑤以上を全てのスローについて行い、チェックされた場所にかぶりがなければジャグリング可能

 この方法について2点変更を加えることで小数サイトスワップのジャグリング可能性を判定できます。
①あるスローについて、その高さ分の状態を持っているとする
②そのスローを前に1つ進めて状態から前の地点でのインターバルを引く
③最後まで行ったら先頭に戻る
④0になった時の場所をチェック、ただし判定中のスローの左右と着地点のスローの左右が整合しなければ、ジャグリング不可能また、着地点のインターバルが0の場合は次のスローにも着地可能
⑤以上を全てのスローについて行い、チェックされた場所にかぶりがなければジャグリング可能
(補足)左右の整合とは例えば右手からクロスで投げたら着地点では左手で投げ始める必要がある。

5. 小数サイトスワップの作り方

 この記事の目標である各スローの高さとインターバルの関係を考えます。
まず、整数のサイトスワップから始めてジャグリング可能性を保ったまま、インターバルを調整する方法があります。

 ある整数サイトスワップ列s₁,s₂,・・・とインターバル列i₁,i₂,・・・について以下の行列cₘₙを計算します。
・cₘₙはsₘ起点で着地点の判定を行った際にsₙを通過する回数(sₙに付随するインターバルを使う回数)
インターバル列をi₁',i₂',・・・に変化させたとき、サイトスワップ列は
sₘ' - sₘ = cₘₙ (iₙ' - iₙ)(nについて和をとる)
となる。

 つまり各インターバルの変更がそのインターバルを使用する回数の重みをもってサイトスワップに反映されるということです。

 単純な時間単位の変更による変化と区別するためにiₙの和とiₙ'の和は不変(サイトスワップの周期に等しい)という制約をつけるとリズムの変化を表現しやすいです。
また、負のインターバルも計算上は考えられ、より広い意味でのリズム変化を同時に分析できますが、0以上とするのが直観的で目的にかなっていると思います。


s₁=5, s₂=3, i₁=1, i₂=1とすると、c₁₁=3, c₁₂=2, c₂₁=1, c₂₂=2と計算できる。

i₁'=0.5, i₂=1.5に変化させることを考える。

s₁' = s₁ + c₁₁(i₁'-i₁) + c₁₂(i₂'-i₂) = 5 + 3 × (0.5 - 1) + 2 × (1.5 - 1) = 4.5
s₂' = s₂ + c₂₁(i₁'-i₁) + c₂₂(i₂'-i₂) = 3 + 1 × (0.5 - 1) + 2 × (1.5 - 1) = 3.5

と計算できる。

6. 変形したサイトスワップの解釈

 変形の結果「4.5x0.5 3.5x1.5」は「右で4.5をクロスで投げた後に0.5待って、左で3.5をクロスで投げた後、1.5待つ」投げ方となります。
つまり4.5、3.5の順でタタンと投げると解釈できます。

7. 変形後の左右の割り振り

 基本的には元のサイトスワップが奇数であればクロス、偶数であればセルフに割り振ればよいです。
 ただし、元のサイトスワップが奇数で0x0になってしまうような場合(1のインターバルを0にしたときなど)のみ、解釈が難しくなります。

8. シミュレータ 

 上記の計算をやってくれるシミュレータを作ってみました。

https://snsnclub.com/SSM/

画像2


スライダーで各インターバルの調整ができ、その結果高さがどう変化するか計算してくれます。
また、リズムがどうなるか視覚的に●で表現しています。

9. 逆の計算

 逆にある整数サイトスワップから目的の高さに変更するにはどうインターバルをいじればいいかというのはcₘₙの逆行列であらわされます。
ここで一つの疑問が生まれます。

「ある小数列があったときに、適当なインターバルとクロスorセルフを与えることでジャグリング可能にできるか」

 その周期におけるサイトスワップ全てに対して総当たりで逆行列を使って計算→インターバルが全て0以上のものを求めるというのはできていますが、
それが必ず存在するのか、また一意に定まるのか、というのはわかっていません。
誰か助けてください。

10. 今後の展望

 このような小数のサイトスワップ(つまりリズムが任意)を表示するシミュレータを作っているところです。
完成したらお披露目したいです。

この記事が気に入ったらサポートをしてみませんか?