自由研究#5 寸法を考慮する

こんにちは、開発担当の杉原です。

 

先日の台風、特に風が凄まじかったのですが、皆さま大丈夫でしたか?

個人的な話であれなんですが、自宅はなんともなかった(うっかり外に出しっぱなしだったあれこれも無事)ものの、実家は外壁が剥がれて近所の家の窓ガラスに直撃したり、ネット回線がダウンしたりと散々だったようです。

史上最大級みたいな話を事前にどこかで見て、「また大げさな」とか思っていたのですが、本当にすごい台風でしたね。

さて、引き続いての自由研究。

今回で一区切りつけたいと思っています。

 

前回とりあえずランダムにボールが飛ぶようになったわけで、なんかそれっぽくなったなぁと思ってました。

じゃあ、もっとリアルな寸法に当てはめてみようかなと思って、いろいろ調べてみました。

 

まずはストライクゾーン。

これは明確な寸法定義があるわけではなく、打者が打撃姿勢になったときの脇の下~膝までの高さと、ホームベースの幅で成り立つようですね。

とりあえず、それっぽい枠を作ってみました。

ちょっと狭いですかね?

一応横幅はホームベースの43.178cm……よりかはちょっと小さいですが43.1cmになっています。

 

続いて投手板からホームベースの先まで。これが18.44mとのこと。

これも大体であわせてみます。

いや遠いな!

野球エアプな引きこもりマンなので、本当にこんなに離れているのかと疑心暗鬼になってしまいます。

 

さて、これで一度実行してみます。

全然届いてない!

 

どうやら打ち出す力が弱すぎるようです。

打ち出す力については、第3回で設定しましたね。これを考え直してみましょう。

 

 

 

まずボールのスピードをチェックしてみます。

スピードは、ボールを選択してSpeedプロパティを見ることで確認できます。

チェックしてみると、おおよそ8.5m/s前後でした。当初目指した球速は33m/sなので、全然足りていませんね。

 

次にPusherの速度も考えてみます。

これについてはSpeedを測れないので、別のアプローチで考えてみます。

当初、Pusherの重さ設定がないので1kgであると仮定しましたが、これを疑ってみました。

実際に調べてみると、このPusherの場合およそ3.5kgほどの重さだったようです。となると、Forceを3.5倍しないと意図した速さにならないわけですね。

 

ということで、Forceを3.5倍した11550Nに設定してみました。

なかなかいい感じですね。

試しに、バッターボックス付近でのボールの速度を調べてみると、まちまちではあるものの、28m/s前後といったところでしょうか?

 

ただ、上記アニメーションの5球目、ボールが壁よりも外側へ飛んで行っているのがわかるかと思います。

また、このアニメーションからではわかりませんが、結構上すぎたりもするので、前回設定したランダム値の範囲をもう少し狭めたいと思います。

ほかにも、LoadCreatorで生成されたボールが端の方でもうまく打ち出せるよう、Pusherの大きさ・形を変更し、それに合わせてForceを再設定してみました。

 

結果が以下。

せっかくなので、肩越し視点、画像大き目、ちょっと長めで撮影してみました。

左右方向のぶれが少なすぎるような気はしますが、まあいいかな? どうでしょうか?

もともと大きく横方向にずれていたのは、Pusherの端のほうに当たっていたのが原因と考えられるので、いろいろ調整してはみたものの、かえって横方向のぶれは小さくなりました。

 

高さ方向については以下のような感じで乱数を小数点以下まで含めて、また下限を定めるようにして生成することで調整しています。

function PusherSensor_OnBlocked( sender : Demo3D.Visuals.PhotoEye, load : Demo3D.Visuals.Visual )
{
    var pusher : Demo3D.Visuals.PusherVisual = sender.Pusher;
    if (pusher == null) return;
    if (!sender.PusherRules.Accept(load)) return;

    // 角度をランダムに変更
    var rnd = new System.Random();
    var value = rnd.Next(60) / 20  + 2.5;
    pusher.RotationXDegrees = value;
    pusher.CreatePhysics();
        
    wait(sender.PusherDelay);
    pusher.Activate();
    wait(sender.PusherDuration);
    pusher.Deactivate();
}
// 今回はJSのみ

ひとまず、こんなもんじゃないですかね。

 

というわけで、1か月ほどやってきたこの企画ですが、いったんここで終了とさせていただきます。

 

やはり事前準備なしで、しかも忙しい時期に始めていい企画ではなかったですね。

ちょっとグダグダになってしまって、果たしてこの記事を公開したままにしていいのかという疑念すらわいてきます。

 

そういうわけで、もっとちゃんとした記事を書いていくためにも、次週より通常通りの内容としていきたいと考えています。

なんだかんだで、既存ユーザの方が閲覧されているようで、特にTransfer関連の記事を読んだうえで問い合わせのメールをいただくこともありました。

なので、もうちょっと有益なお話ができたらなぁと考えてます。


 

ということで次回からは【How to Demo3d Scripting】を再開。「変数のあれこれ」をお送りする予定です。

更新は9/13(木)です。お楽しみに。