えいまぼJEブログ

Minecraft Java Editionに関していろいろ書きます

TNTの座標計算 #2 - 複数の装薬

前回: TNTの座標計算 #1 - 式と導出 - えいまぼJEブログ

次回: TNTの座標計算 #3 - 単位TNT推力 - えいまぼJEブログ

環境はMinecraft Java Editionです。

結論

 N 個の装薬がすべて図1のような位置で爆発したとき、弾頭の速度・位置は以下の式で表されます。

図1

\\\
\displaystyle v _ {x} = (N V _ x + v _ {0x}) \times 0.98 ^ T \\\
\displaystyle v _ {y} = (N V _ y + v _ {0y} + 1.96) \times 0.98 ^ T - 1.96 \\\
\displaystyle v _ {z} = (N V _ z + v _ {0z}) \times 0.98 ^ T \\\
\displaystyle x = x _ 0 + 50 \times (N V _ x + v _ {0x}) \times (1 - 0.98 ^ T) \\\
\displaystyle y = y _ 0 + 50 \times (N V _ y + v _ {0y} + 1.96) \times (1 - 0.98 ^ T) - 2 T \\\
\displaystyle z = z _ 0 + 50 \times (N V _ z + v _ {0z}) \times (1 - 0.98 ^ T)

ただし、

  •  X : 装薬と弾頭との距離のx成分
  •  Y : 装薬と弾頭との距離のy成分
  •  Z : 装薬と弾頭との距離のz成分
  •  \displaystyle R = \sqrt{X ^ 2 + Y ^ 2 + Z ^ 2}
  •  \displaystyle V _ {x} = \left(1 - \frac{R}{8}\right) \frac{X}{R}
  •  \displaystyle V _ {y} = \left(1 - \frac{R}{8}\right) \frac{Y}{R}
  •  \displaystyle V _ {z} = \left(1 - \frac{R}{8}\right) \frac{Z}{R}
  •  v _ {0x} : 装薬の爆発を受ける前に持っていた速度のx成分
  •  v _ {0y} : 装薬の爆発を受ける前に持っていた速度のy成分
  •  v _ {0z} : 装薬の爆発を受ける前に持っていた速度のz成分
  •  v _ x : 速度のx成分
  •  v _ y : 速度のy成分
  •  v _ z : 速度のz成分
  •  x _ 0 : x座標の初期座標 (装薬の爆発を受ける点)
  •  y _ 0 : y座標の初期座標 (装薬の爆発を受ける点)
  •  z _ 0 : z座標の初期座標 (装薬の爆発を受ける点)
  •  x : x座標
  •  y : y座標
  •  z : z座標
  •  \displaystyle T = 弾頭着火\rm{gt} - 装薬着火\rm{gt} + 1

です。

要するに、前回の式の  V _ x V _ y V _ z の前に  N がついただけです。

※z座標・速度のz成分は図に描画していません(できません)。

装薬の爆発座標がバラバラな場合

ここではより厳密に、装薬の爆発座標がバラバラな場合を考えます。 まず、装薬の個数と位置関係、速度ベクトルを以下のように定義します。

  •  M : 装薬の個数
  •  X_k : ある装薬と弾頭との距離のx成分
  •  Y_k : ある装薬と弾頭との距離のy成分
  •  Z_k : ある装薬と弾頭との距離のz成分
  •  R_k : ある装薬と弾頭との距離
  •  V_{xk} : ある装薬が弾頭に与える速度ベクトルのx成分
  •  V_{yk} : ある装薬が弾頭に与える速度ベクトルのy成分
  •  V_{zk} : ある装薬が弾頭に与える速度ベクトルのz成分
  •  \displaystyle V _ {xk} = \left(1 - \frac{R_k}{8}\right) \frac{X_k}{R_k}
  •  \displaystyle V _ {yk} = \left(1 - \frac{R_k}{8}\right) \frac{Y_k}{R_k}
  •  \displaystyle V _ {zk} = \left(1 - \frac{R_k}{8}\right) \frac{Z_k}{R_k}

ただし、 R_k \lt 8 が成り立っているものとします。

その上で、弾頭の速度・位置は以下の式で表されます。

\\\
\displaystyle v _ {x} = \left(\sum_{k = 1} ^ M V _ {xk} + v _ {0x}\right) \times 0.98 ^ T \\\
\displaystyle v _ {y} = \left(\sum_{k = 1} ^ M V _ {yk} + v _ {0y} + 1.96\right) \times 0.98 ^ T - 1.96 \\\
\displaystyle v _ {z} = \left(\sum_{k = 1} ^ M V _ {zk} + v _ {0z}\right) \times 0.98 ^ T \\\
\displaystyle x = x _ 0 + 50 \times \left(\sum_{k = 1} ^ M V _ {xk} + v _ {0x}\right) \times (1 - 0.98 ^ T) \\\
\displaystyle y = y _ 0 + 50 \times \left(\sum_{k = 1} ^ M V _ {yk} + v _ {0y} + 1.96\right) \times (1 - 0.98 ^ T) - 2 T \\\
\displaystyle z = z _ 0 + 50 \times \left(\sum_{k = 1} ^ M V _ {zk} + v _ {0z}\right) \times (1 - 0.98 ^ T)

要するに  V _ x V _ y V _ z がシグマで合計されただけです。

8block/gtを超えない速度で2次装薬を打ち上げるキャノンはこの式を使うんではないかなと思います。 この場合は爆発座標のずれに注意してください1

検証環境

Minecraft Java Edition 1.17.1-1.18.1


前回: TNTの座標計算 #1 - 式と導出 - えいまぼJEブログ

次回: TNTの座標計算 #3 - 単位TNT推力 - えいまぼJEブログ


  1. 爆発座標のずれはこの動画の10:30あたりから解説しています