TAMARI-玉理論 · Journal · 2026-06-18
衝突後の手玉と 1 クッション ── ポジションプレイの物理を v3 で足した
タグ: ビリヤード · ポジションプレイ · 押し玉/引き玉 · クッション · TAMARI-玉理論
v2 を作ったあとに何回か触ってて、 一個ずっと引っかかってたことがあった。
v2 の手玉って、 衝突した瞬間に「90度ルール方向にビューン」って出て、 そのまま直線で停止までいくんだよね。 でも実際の球場でこれやられたら違和感しかない。 押しを入れて撞いたらフォローで前に伸びるし、 引きを効かせたら手玉が戻ってくる。 ストップショットならその場で止まる。 これが見えてないと、 v2 ってただの衝突計算機になっちゃう。
実戦のビリヤードって、 結局のところ 「衝突後に手玉がどこに残るか」 が全部 なんだよね。 的球を入れることなんて B クラスでもできる。 次の球をどう撞ける位置に手玉を運ぶか ── ここがポジションプレイで、 上に行けば行くほどこの精度勝負になっていく。
ということで v3 では、 衝突後の手玉軌跡を「ちゃんと物理として」 出すことにした。
→ 衝突後の手玉 × クッション v3 を試す
押し玉でフォロー、引き玉でドロー、ストップで止まる
v3 のデモで一番見てほしいのは、 同じ厚みと同じスピードで撞いても、 撞点 縦を上下に動かすだけで衝突後の手玉が全然違うラインに出ていく こと。
- 撞点 縦 = 0 (ストップショット): 手玉が衝突後ほぼ止まる. 90 度ルールがほぼ厳密に成立
- 撞点 縦 = + (押し玉): 手玉が前に伸びる. 90 度ラインより浅い角度で出ていく (フォロー)
- 撞点 縦 = - (引き玉): 手玉が戻る. 90 度ラインより深い角度で戻る (ドロー)
これ、 言われてみれば当たり前なんだけど、 v1 でも v2 でもこの「衝突後手玉の進路変化」 は出してなかった。 なぜかというと、 v2 の shot.ts には実際こう書いてあった。
// 衝突直後 v_immediate → (5/7)·v_imm + (2/7)·R·ω_top で一気に最終速度へジャンプ
// sliding phase (約 20%) はカットされるが、 進路の方向変化が user-visible で重要
これ、 「ジャンプ」 って書いた本人 (= 俺たち) も「sliding phase はカットしてる」 って自覚はあった。 ただ v2 の主題が「スロウ」 だったから、 そこは後回しにしてた。 v3 でようやくこの sliding phase をちゃんと数値積分するようにした。
なぜ手玉は curving するのか
物理の話を少しだけ。
衝突後の手玉は、 90 度ルール方向 (= 厚みで決まる接線方向) に並進し始める。 でも球の中に残ってる「回転」 は、 衝突前の進行方向 (+x) の軸まわりのまま動いてない。 つまり、
- 並進方向: 衝突後の新しい方向 (例えば +y)
- 回転軸: 衝突前の方向 (+x) のまま
この 2 つが違うから、 球の接触点 (床に触れてる場所) で滑りが起きる。 滑りがあれば床から摩擦が働く。 摩擦は滑りを止める方向に働く ── これが手玉を引っ張って、 進路を curving させる。
- 押し玉なら摩擦が +x 方向に手玉を引き戻す → フォローして前に出る
- 引き玉なら摩擦が -x 方向に手玉を引っ張る → ドローして戻る
- ストップショットなら回転が無いから摩擦も働かない → 90 度方向にそのまま転がってすぐ rolling 拘束で減速
これが現実のビリヤードで起きてることの正体。 球場で「押し」「引き」「止め」 を撞き分けてる感覚は、 全部この sliding phase の curving を変えていることになる。
1 クッションまで反射するようにした
ついでに v3 では 1 回までクッション反射するようにした。 手玉が境界に当たったら自動でバウンドして、 そのまま停止までシミュレートする。
側スピン (撞点 横) を入れて撞くと、 クッション反射時にも面白いことが起きる。
- side spin なし: 入射角 ≈ 反射角 (理想的な反射)
- running side (反射方向と同じ向きのスピン): 反射角が広がる. クッションで「食う」 ように転がる
- reverse side (逆向きのスピン): 反射角が狭まる. 立った反射
これ、 実戦で「クッションタッチで side が乗る/抜ける」 って呼んでるやつの物理的な裏側。 v3 のデモで side を入れて撞くと、 反射点 (黄色いマーカー) からの 2 段目のラインが side の符号で変わるのが見えるはず。
クッション ON/OFF トグル
下のコントロールバーに「クッション ON/OFF」 ボタンをつけた。 OFF にすると軌跡が境界の先まで伸びる (実際にはありえないけど、 反射前の純粋な curving が見やすい)。 ON で 1 回だけ反射する。
v3 はまだ「1 回まで」 にしてる。 2 クッション、 3 クッション、 そこからの的球連鎖 (キス) とかは v4 以降の楽しみにとっておく。
v3 で見えるようになったもの
物理的な話を整理すると、 v3 でようやく扱えるようになったのは:
- post-collision sliding ── 衝突後の手玉が curving する区間. ここがフォロー/ドロー/ストップを生む
- 球-床摩擦の 2D 化 ── 並進方向と回転軸が違うときの摩擦 vector (Marlow Ch.5 をベースに数値積分)
- クッション反射の球-壁摩擦 ── side spin が反射角を変える原理 (球-球摩擦と同じ構造)
これが入ったことで、 v3 はただの「衝突計算機」 から、 ようやく 「次のショットに繋がる手玉位置」 まで見えるツール になった。 ポジションプレイの話ができる土台ができた、 という感じ。
デモで試してほしいこと
1 個目: 厚み 30°、 初速 2 m/s、 撞点 縦だけ動かす
撞点 縦をストップ → 押し → 引き と動かしていくと、 手玉の curving が劇的に変わる。 同じ厚み・同じスピードでもこんなに違うラインが出るんだ、 というのが見えるはず。
2 個目: クッション ON で side spin を変えてみる
厚み 50°、 初速 4 m/s くらいで、 撞点 横を 0 → + → - と動かしていく。 反射点 (黄色マーカー) からの 2 段目ラインが、 side の入れ方で広がったり狭まったりするのが見えるはず。 これが実戦の「クッションでスピンを使う」 感覚。
3 個目: stun shot (撞点中心) で 90° を確認
撞点を完全に中心 (h_v=0, h_h=0) に戻して、 厚み 30〜45° で撞くと、 手玉と的球の分離角がほぼ 90° で出ていく。 これがビリヤード物理で一番有名な「90 度ルール」 で、 v3 でちゃんと再現されてることが見える。
v3 の限界
正直に書くと、 v3 もまだ近似だらけ。
- 衝突中の側スピン消費を簡略化してる (実際は衝突中にも ω_z が少し減る)
- クッション反射は 1 回までしか追ってない (2 クッション以降は描画しない)
- 球-球連鎖 (キス) は扱ってない. v3 の手玉は的球以外と衝突しない
- キューの elevation (立てて撞く) も無視. ジャンプとマッセは入ってない
このあたり、 ポジションプレイの本質に関わる部分はまだ残ってるから、 v4 以降で順に足していけたらと思う。
参考にしてる文献
引き続き Marlow と、 今回は Shepard を新しく入れた。
- Marlow, W. C. The Physics of Pocket Billiards (1994), Ch.5 球-床摩擦と post-collision motion
- Shepard, R. Amateur Physics for the Amateur Pool Player ── クッション反射の球-壁摩擦モデル
- pooltool ライブラリのドキュメントの cushion 反射の章
数式の話は、 もう少し自分の中で噛み砕いてから別の記事で書こうと思う。 今回は「v3 のデモで見えるもの」 だけ先に出した。
→ 衝突後の手玉 × クッション v3 を試す