数値計算ですので、未経験の人には意味不明な内容も含まれているでしょうが、画像だけでも眺めてください。
難しい数値計算はしていません。使用した計算スキームは、4次のルンゲクッタ法の2次元版で、大学の学部生レベルで習うでしょうか。
繰り返しの主張ですが、計算時点での選手たちの移動速度を考慮すれば、各人がカバーできる領域はボロノイ図の領域からずれます。
ボロノイ図の代替案としての私の提案は、試合の状況が変化する数秒程度の範囲で、各人がカバーできる領域を図示する事です。
本記事の内容。
- ボロノイ図再現
- 初速度がある場合
- モデル速度からの衝突境界線の計算
- 実用的な図?
以下の画像は、Python3のこのプログラム(jupyter notebook)をGoogle colaboratoryで実行し、作成しました。
ボロノイ図再現
22の母点によるボロノイ図。pythonのモジュールから計算。横105m縦65m。点群の位置は乱数により決定。 |
粒子計算から求めた境界線。右側の境界線に隙間があるように見える部分は、粒子を密にすれば解消されます。 |
上記の境界線を構成する粒子を、各母点固有の色とシンボルでプロット。 |
ボロノイ図以外に、出自の確かな、誰にでも計算可能な(計算しやすい)領域図があれば、誰かが現在使っているはずです。
ボロノイ図以外に人々の口にのぼるような領域図が無いという事は、少なくとも簡単に領域を計算する方法は無いのでしょう。
そこで今回は、仮想粒子を使った数値計算を実行しました。
(以下、数値計算の内容紹介なので、面倒なら次の段落までとばして下さい)
内容は、「ある加速度と速度上限をもつ粒子を選手に見立て、母点から出発した多数の粒子の位置と速度の時間変化を計算し、粒子同士が衝突する点を探す」、というものです。
(ボロノイ図を計算するための点を母点と呼ぶそうです)
速度変化は、100m走の速度の時間変化を参考に、粒子の速度上限を 9m/s、加速度は 3m/s^2 としました。(どの方向にも均等)
位置と速度の時間変化は、上記のように4次のルンゲクッタ法を使いました。(何十年も前から使われている、有料無料の数値計算ライブラリに必ず入っているような、ごく初歩的な数値計算方法です)
0.1秒の時間幅で、7秒間の移動を計算しました。(初速度0なら、この7秒間で50m移動します。他の母点の粒子と必ず衝突するでしょう。)
1つの母点につき360の仮想粒子を飛ばしました。
全母点の全粒子の位置と速度の時間変化を計算した後で、衝突した粒子のペア(グループ)を検出しました。
今回のような短時間有限個の粒子計算では、粒子同士がきれいに衝突するという事はまず無いので、粒子間の距離が1m以内になれば衝突とみなしました。(「他の選手に邪魔されずに個人がカバーできる領域」という主旨から考えて、これで十分)
まずはこの粒子計算でボロノイ図を再現できるか、調べました。
上に見せた画像の1枚目は二等分線を境界とするボロノイ図、2枚目と3枚目の画像の境界は初速度0を仮定した粒子計算から導出しました。
3枚目のプロットでは衝突した粒子を示すシンボルが重なり潰れていますが、シンボルの色を見れば、ボロノイ図の境界線が異なる母点から出発した粒子で構成されている事がわかります。
前の記事に書いたように、ボロノイ図をサッカーで使う際の暗黙の仮定は、「静止状態の選手達、同じ走行能力(速度変化)を持った選手達」です。
全母点の速度が0(粒子の初速度が0)で、全粒子が同じ速度変化をすれば、ボロノイ図と同等の結果が得られます。
今回は短い時間のみ仮想粒子を加速させましたが、例えば時間に無関係に一定速度でも、逆に加速し続ける速度変化でも、ほぼ同じ境界線が得られるでしょう。(さすがに単調減速はダメそう)
初速度がある場合
次に、仮想粒子が初速度を保つ場合を考えました。初速度は、9m/s以下を仮定しました。
母点に与えられた初速度は、そのまま母点から出発する粒子の初速度になります。
初速度の大きさと方向を一様乱数で与え、初速度の最大値は9m/sとしました。
ランダムに与えた速度場。矢印の長さが5mなら、5m/sの速度。矢印が見えないものも速度0ではない。 |
ある点を出発した360個の粒子の位置(青線の円)と速度(赤矢印)の時間変化。1秒毎。 |
上記2枚の画像のうち、1枚目の画像が計算に使用した初速度、2枚目の画像は、ある母点から出発した360個の粒子の位置と速度の時間変化です。
母点の初速度と速度上限のため、初速度0の場合に円状になるはずの粒子の位置は、初速度の方向に潰れます。
粒子群の中心位置は移動します。
そして、これらの速度群を初期値として数値計算し、衝突した粒子群をプロットしたのが次の図です。
ところどころ、破断した境界線や他領域に急に現れる境界線があります。
一方、それなりに正しそうな境界線も見られます。
不完全な境界線は棚上げして、前回と今回の記事で繰り返し主張している事は、選手に相当する母点の速度を考慮して計算した境界線がボロノイ図と異なるという事です。
左、ボロノイ図(初速度0で計算した境界線)。右、ランダムな初速度で計算した境界線。 |
各母点から出発した粒子が衝突してできる境界線は、母点の速度が0に近づけばボロノイ図の境界線に近づきます。
一方、母点に速度があり、しかも各速度ベクトルの方向が複雑に入り組めば、ボロノイ図からは大きく離れます。
重ねて書きますが、ボロノイ図を無制限に活用する事には注意して下さい。
選手たちの動きが激しい状況では、適用は難しいと思って下さい。
一方でボロノイ図の利点は、個人がカバーできる領域の目安になりそうな、数学的に矛盾の無い領域(境界線)が、選手たちの位置データから簡単に得られる事です。
モデル速度からの衝突境界線の計算
破断した境界線や孤立した境界線に話を戻します。
これらの一見しておかしな境界線は、間違いなく、母点群の初速度の影響を受けています。
しかし、周囲にランダムな速度を持つ母点がいくつもあるため、その因果関係を単純化できません。
そこで、正三角形の頂点に位置する3点に一定速度を与え、その速度方向の変化によって、衝突が作る境界線の変化を調べました。
一辺20mの正三角形の頂点に位置する3点から計算した衝突境界線。赤丸、青四角、緑星が母点。この場合は初速度0。粒子は3m/s^2の加速度、最大速度9m/s、7秒間の計算。白抜きのシンボルは、衝突せずに広がっている粒子。 |
ある速度場(黒矢印)を与えた場合の衝突境界線。赤丸の速度は0。 |
その2。赤丸の速度は0。 |
これらのモデル計算から分かった事は、「母点群の位置と速度によっては、衝突境界線が分断したり、異なる母点からの粒子群が衝突せずに平行に移動する領域がある」という事です。
孤立した境界線の一部は、この平行移動してしまった粒子群が、遠くにある母点の(やはり平行移動した?)粒子群と衝突してできたものでしょう。
この「粒子群が平行移動する領域」は「他の選手に邪魔されずにカバーできる領域」とどういう関係にあるべきか、どう処理すべきか、理解できていません。
実用的な図?
今回、粒子がフィールドを十分にカバーするために7秒間の移動を計算しました。
ただこの7秒間で移動できる距離は長く、遠くの母点の粒子と衝突してできる孤立した境界線の原因にもなっています。
サッカーの試合では、数秒(時には1秒)で位置関係や状況が大きく変化します。
今回の7秒という計算時間は、明らかに試合中の変化の時間スケールより長い時間です。
従って、もし「個人がカバーできる領域」を知りたいのなら、せいぜい数秒後までの時間変化を考慮する事が、現実的で有益だと思います。
以下の図は、3秒で移動できる領域の図示です。
3秒図。 |
この「3秒図」でも、一部には破断した境界線があります。
3秒というのは私が勝手に挙げた数値ですので、想定するプレーのタイムスケールに依存してより適切な値があるでしょう。
どこにパスを出すべきか、出してはいけないかについては、ボロノイ図よりもこちらの図のほうが理解しやすく、領域の根拠が「硬い」です。
にほんブログ村
190127、細かな言い回し、誤字脱字を修正
190211、計算プログラムを公開
191212、細かな言い回しを修正
0 件のコメント:
コメントを投稿