初めての魔法【魔導書視点】②
どうしよう。色々と思案する。
基本この世界の魔法は、物理の法則から著しく逸脱しない。
例えば1kgの物質を創造するには、有名なアインシュタインのE=mc²が適応され89,875,517,873,681,764J(89.9 PJ)のエネルギーが必要になる。こんな途方もないエネルギー量、一個人が扱うのは到底無理だし、エネルギーから物質を作り出す方法が想像できない。同じように異世界物の定番の「収納(異次元ポケット)」や「テレポート(空間移動)」も無理。異次元が想像できない。超便利な魔法なので、存在したら「俺TUEEEE」ができたのに…。くそっ「俺TUEEEE」したかったぞ!
従来の魔法を解析し、今現在自分が把握している基礎はこの四つ。
1)物質の加速
2)物質の加熱と冷却
3)特定分子の分離
4)化学合成
まぁ、これらができるだけで十分魔法は「トンデモない」気がする。
従来の魔法は、これらの基礎を組み合わせて発動する。
fireは簡単に言えば物質を加熱して、火を起こさせる魔法。1kgの物質(体の表面)を、一気に1000度くらいまで持っていく。1kgの水を0度から100度まで持っていくには420,000J(420kJ)だとして、1000度なら(沸騰などを無視して)単純計算で4,200,000J(4.2MJ)。1MPで1MJの仕事ができるので、fireの魔法は大体4.2MJが必要な計算になる。魔道師の先輩達が使い勝手が良いように4MPで固定し、fireの魔法は広く知られるようになった。
質量を減らすか、温度を少し下げるか?たしか体温を50度まで上げれば、タンパク質が凝固するって言うし。ただジャイアントスパイダーって15~20kgぐらいあったような?失敗した時の事を考えると、ちょっとMP量が不安だ。
ここは普通に、加速の魔法で行こう。
accelerate(ax,ay,az)
これは0.1秒間、x軸、y軸、z軸に指定した数値(単位はm/s²)だけ対象物体を加速させるコマンド。
onthrow(event)
加速させるタイミングは、投げられた(throw)時にする。event.projectileで投げられた物体が参照できるはず。
さてとスクリプトを組み上げようか。
「ハァハァ。も、もう、無理」
エイダも体力の限界みたいだ。考えもまとまったし、充分距離を稼いだ。偉いぞエイダ。スクリプトを書きながら、石を投げられるか聞いてみる。
「マスター、投擲はできるか?」
「とうてき?」
「手で物を投げる事だ」
「できる。お父さんに教えてもらった」
おっ、大丈夫そうだ。やるな、エイダのお父さん。
「良し。この計画で行こう。ここら辺に投げられる石はあるか?」
川が流れている音がする。投げやすそうな石がゴロゴロしているはずだ。
「ある。沢山ある」
コードも書き終えた。
--- page0.html -----
<SCRIPT>
master.onthrow=function(event){
var stone=event.projectile;
var ax=100*stone.vx;
var ay=100*stone.vy;
var az=100*stone.vz;
stone.accelerate(ax,ay,az);
}
</SCRIPT>
--------------------
(注意:『onthrow』やら『event.projectile』やら『accelerate()』何ていうものは、従来のjavascriptには存在しません)
加速度の値は、単純に初速の100倍ぐらいにしとこ。この方が計算楽だし。
もし石の速度が100km/hrだとして、3600秒で割ると27.7m/s。
0.1秒間2770m/s²加速するとして、加速後の速度(v=v0+at)は、
27.7m/s+2770m/s²*0.1s=304.7m/s
単純計算で305m/sぐらいか。あれ?音速(340.29m/s)に近くない?
一投あたりの運動エネルギー(K=mv²/2)は、石の重さが0.5kgだとして
0.5kg/2*305m/s*305m/s=23.256kJ
3MJ=3000kJなので、普通に割って。
3000kJ/23.256kJ=129
計算が間違っていなければ、129発ぐらい投げられそうだ。うん多分大丈夫…だと思う。若干計算が不安になってきた。物理なんて大学の授業以来だ。
「良し。それを投げて虫に殲滅する」
「えっ、えっ?」
「それで駄目なら、川に飛び込め」
計算が間違っている可能性も場合ある。匂いが消えて逃げられるかもしれない。予備のプランがあった方が安心だ。だがエイダは若干不満そうだ。なんでだ?
「よし、それを投げてみろ」
石を拾ったみたいなので、早くしろと促す。上手く行くかな?ドキドキ。魔法陣の起動音と石が風を切り裂く音がした。魔法自体は問題なく起動したみたいだ。遠くの方から、葉っぱや木の破壊音が聞こえた。あれ?
「当たったか?」
「駄目。狙いが上に行った」
エイダは重力の落下分を考慮して、虫の少し上の方を狙っていたのかもしれない。一瞬なので重力による落下距離は無視してもいいはずだ。
「今度は重力の影響を考えずに、直線的に投げろ。『真っ直ぐ』にだ」
おっと、ついでに残りMPもチェックできる様にしておこう。
--- page0.html -----
<SCRIPT>
master.onthrow(event){
var stone=event.projectile;
var ax=100*stone.vx;
var ay=100*stone.vy;
var az=100*stone.vz;
stone.accelerate(ax,ay,az);
console.log(master.mp);
}
</SCRIPT>
--------------------
保存と更新っと。
「わかった」
魔法陣の起動音がして、鈍い音が遠くから聞こえた。
「あ、当たった」
上手くいった様だ。良かった〜。MPは大丈夫かな?
--- console --------
2.95
--------------------
2回投げて、0.05MP消費。 一投0.025MPだとして、1MPで40回投げられる計算。合計3MPだから3x40で120回。
よし、大丈夫そうだ。
「あと何匹だ?」
「二匹」
「MPは充分足りる。健闘を祈る」
頑張れ〜。
「ん」
エイダは淡々と虫を葬っていった。あれ?百発百中じゃないのか?エイダのお父さん、恐るべし。
戦闘の音がなくなり、辺りには川のせせらぎしか聞こえなくなった。
「生きてる」
戦闘が終わりエイダが呟いた。しばらくすると啜り泣きが聞こえてくる。
「うぇ〜ん、お父さん…お母さん…」
あれ?エイダのお父さんとお母さん無事だよな?何で「お父さん、お母さん」って泣いてるの?あの虫共にやられたのか?嫌なイメージが頭に浮かぶ。子供が泣いていると辛い。ど、どないしよう?な、何か声をかけないと。
「コッホン。あ〜、え、エイダ。よく頑張ったな」
「あ、ありがどう」
鼻水やら涙でちゃんと発音ができていない。なんかぎゅっと抱きしめられている様だ。魔導書がベチャベチャになりそうだけど、まぁいいか。女の子が泣き止むなら、この身を犠牲にしてもいい。結局、エイダが落ち着くまで十数分かかった。
因みにお父さんとお母さんは家で待っているそうだ。ええい、紛らわしいわ。
登場人物
エイダ・ラブレス
冒険者に憧れている9歳の普通の女の子。
父に鍛えられ、男の子並みに投げれる。
喋る魔導書
エイダが森の奥で出会った喋る魔導書。
プログラミングの他に、物理や数学にも精通している。
作者より
戦闘シーンがある為、高校・大学レベルの物理やらプログラミングが満載になってしまいました。次回からは日常パートなので、少しペースを落として解説できたらと思います。
参考にしたページ
エネルギーの単位ジュールの説明
https://ja.wikipedia.org/wiki/ジュール
力の単位ニュートンの説明
https://ja.wikipedia.org/wiki/ニュートン
質量と速度からの運動エネルギーの求め方
https://ja.wikipedia.org/wiki/運動エネルギー
石の運動エネルギーの計算に本当に役立ちました。 質量と速度を入力すると、運動エネルギーを計算してくれます。
http://storagebox.xxxxxxxx.jp/tools/ken_calc.html
アインシュタインの有名な式が説明されて居ます。物質を作る時の途方もないエネルギー量が書いてあります。
https://ja.wikipedia.org/wiki/E%3Dmc2
拳銃の弾の速さが書いてあります。音の速さより早いのが多いですね。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q108491800