いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

プログラミング

C#で変数に関数を代入する、デリゲートについてわかりやすく解説。

C#でデリゲートというのを使ってみましょう。Cで言うところの関数ポインタです。 2つの処理があり、異なるのは中で使う関数だけということがあります。1つめの処理では、その中で関数 add(x, y) を使うとしましょう。例なので、この add(x, y) は単純な足し…

敵機の移動に2つの曲線を使いたい。つなぎ目をどうするか?

シューティングゲームで、敵のキャラクタを式に従って動かします。空間の曲線なら、例えば だったらtが増えるとz軸の正の向きにグルグルとらせんを描きながら進みます。話題は少しそれますが、この式だって易しいけれど数学。「プログラミングに数学は不要…

(新)ベジェ曲線とは何か

空間の中を戦闘機を動かしましょう。普通に数学でやるように空間内の曲線の式を使ってもよいですが、式では表しにくい曲線もあります。 図を見てください。線分p0p1を8:2に内分する点、線分p1p2を8:2に内分する点、線分p2p3を8:2に内分する点をそれぞれp4、p…

任意に与えられた点が凸多面体の内部にあるかどうか判定する

与えられた点が空間内のこんな立体の内部にあるかどうか判定したいとします。立体は、与えられた頂点、8点で決まっています。 シューティングゲームなどで、ゲームを展開する空間のスクリーンに見えない部分では、基本的に戦闘機などを飛ばす必要はありませ…

Unityで左シフトキー、スペースキー、右方向キーを同時に認識できなかった話

Unityで、押されているキーを検出します。 Input.GetKey(KeyCode.LeftShift) (左シフトキー) Input.GetKey(KeyCode.RightArrow) (右方向キー) Input.GetKey(KeyCode.Space) (スペースキー) というコードで、押されているなら true、押されていないなら…

ロドリゲスの回転公式とは何か、何に使えるか

空間ベクトルの話です。図でベクトルrを、ベクトルnを回転の軸としてθだけ回します。例えばθ=60°なら、ベクトルrはベクトルsのところまで回ります。ベクトルnの終点から始点を眺め、反時計回りに角度を測ります。 ベクトルrからベクトルsを求めるた…

0.4から0.6くらいの乱数が他より多めに欲しいときどうするか

いろんなプログラミング言語にRandom()といった名前の関数があります。乱数を発生させます。仕様はいろいろですが、例えば0以上1以下の乱数が欲しいときにはRandom(0, 1)などと書けばよいのです。ゲームでランダムな場所に敵を発生させたいときなどに使えま…

Unityでスクリーン座標から空間内の座標を求める

3Dのシューティングゲームを作るとき、敵機が視界(スクリーン)から消えたときにその敵機を削除するようにプログラミングします(削除せずに放っておくと、見えないだけで存在し続けます。実際にはちょっと見えなくなって、軌道の関係ですぐまた視界に入る…

シューティングゲーム作成中。敵を表示して動かしました。

とりあえず……敵を出して動かしてみました。下の写真です。敵キャラは暫定でこの形。いずれもう少し変えますが。移動のコースは、敵キャラの生成場所と経過時間によって空間内の場所が決まるように数式を決めてやっています。キャラクタはもちろん正面が進行…

ブログ管理者が本を出します

ようやく出版まで漕ぎ着けました。準備を始めたのは昨年の6月です。ちゃんとした原稿になったのが1月半ばでした。Pythonでインタプリタを作る コンピュータ言語を設計・実装してインタプリタの動作を理解しよう (OnDeck Books(NextPublishing))作者:吉田 …

Unityで環境光の強弱をコントロールする、今と昔のゲームプログラミング

Unityでゲーム作成中!……なんですが、細かなところであちこちつまずきます。 「環境光」というのがあります。ゲームの世界を照らす灯りが必要ですが、直接光、環境光と2種類あります。直接光は光源から直に当たる光です。環境光は、光源からの光が直に当たら…

昔あった、コピーツール

昔、20年か30年くらい前にはコピーツールというジャンルのソフトウェアがありました。記録メディアはフロッピーディスクというやつが主流で、直径5.25インチのものをよく使っていました。縦横13cmか14cmくらいです。しかも容量は1Mバイト、今に比べ…

Unityでビルボードを作る!(2) Unityの書籍紹介

前回、Unityでビルボードを実現、という話を書きました。 www.omoshiro-suugaku.com 調べると、オブジェクトには、それを構成する点が4点しかない、本当の平面みたいなものがあるようです。3DオブジェクトのQuadというやつです。実験してみました。これに絵…

Unityでビルボードを作る!

ちゃんとした定義は知りませんが、ゲームプログラミングの技術の中に「ビルボード」というのがあります。3Dのゲームで、例えば道ばたの木など、ちゃんとモデリング(PC上で立体として木を作る。幹、枝、場合によっては葉などのパーツもしっかり)したものを…

ゲームプログラミング雑感、時間を確保して勉強しましょう

大きく勤務状況が変わり、とにかく時間の余裕ができました。好きなことをいろいろやっています。何回か触れていますが、最近はUnity(ゲームを書くための開発環境)、C#で3Dのゲームを書く準備をしています。Unity、気に入りました。スマホでテストすると…

スマホでゲーム作り(4)

UnityC#ゲームプログラミング入門 2020対応 作者:津耶乃, 掌田 発売日: 2020/10/30 メディア: 単行本 Unityを使ったゲームプログラミングの本です。目次は以下の通りです。 Chapter 1 ゲームで使うUnityの基本機能 1-1 ゲームの機能を考える 1-2 ゲームオブ…

スマホでゲーム作り(3)

2D、3Dのスマホゲームを書くための本です。よい本でした。 Unityの教科書 Unity 2020完全対応版 2D&3Dスマートフォンゲーム入門講座 作者:北村 愛実 発売日: 2020/08/29 メディア: Kindle版 一応最後まで、実験しながら読み終わりました。説明がとにかく丁…

スマホでゲーム作り(2)

www.omoshiro-suugaku.com 前々回、Unity+C#でゲームプログラミングする本を紹介しました。PCで書いたプログラムは実機テストしなければなりません(動作の確認などはPCでできますし、通常はPCでのみ作業)。つまりスマホに送って実際に動作させないといけ…

将棋ソフトのミニマックス法、αβ法

将棋を指すソフトなどが手を考えるときに使うミニマックス法、αβ法について簡単に説明しましょう。ことによるとディープラーニング全盛の今、違う部分もあるかも知れませんが、大事さは変わらないと思います。 まず基礎知識として将棋ソフトの大体の仕組み。…

スマホでゲーム作り

Unityの教科書 Unity 2020完全対応版 2D&3Dスマートフォンゲーム入門講座 作者:北村 愛実 発売日: 2020/08/29 メディア: Kindle版 ↑ これはkindle版ですが、紙の本を買いました。いよいよスマホのゲームプログラミングに手を出しました。プログラミングにつ…

昔のプログラミング、割込み、……

手元に『インターフェース』1989年1月号のおかむらみちお氏(多分「岡村」)の割り込みに関する記事の一部のコピーがあります。ファイルに綴じてずっと持っています。章、節は次の通りです。 3 アセンブラでの割込み 3.1 アセンブラの問題点 3.2 割込み用テ…

バブルソートとは何か

バブルソートについて書きましょう。これは数値の組を大小順に並べ替える方法のひとつです。前回クイックソートの話をしました。クイックソートは「最速」ということになっています。 www.omoshiro-suugaku.com しかしバブルソートは遅いのです。バブルソー…

クイックソートとは何か

データを大小順に並べ替える作業、ソートはデータ処理の様々な場面で使われ、アルゴリズム(算法。明確な手順)はたくさんあります。バブルソート、基本選択法、ヒープソート、クイックソート、……。バブルソートなどはロジックは分かりやすいけれど効率が悪…

シューティングゲーム作成準備~! 効果音、BGMを鳴らす。

勉強と並行してシューティングゲームでも作るかな……と、少しずつ準備しています。pythonにはpygameという2Dゲーム作成のためのモジュールがあり、ゲームを書くのに使えます。3Dは扱えないみたいですが、スプライトは使えるし、3Dっぽく見せる感じ(疑似3D)…

コンピュータ言語作成のすすめ。再帰コールの不思議。

再帰的なプログラムというのがあります。プログラムを書き始めたばかりの頃、そういうものがあるとは全く知らなかったときに再帰的なプログラムに出会ったときの衝撃は大きかったです。大学では情報処理の授業でFORTRANを習いましたが、今はどうか知りません…

Pythonで円周率を小数第100位まで求める(3)

今度は引き算を試してみます。関数 minus() を書きました。繰り下がりは、あれば cf = 1とし、なければ cf = 0 で処理します。各桁ごとに1桁の数の引き算をし、結果が負になったら繰り下がりありとして引き算の結果には10を加えます。これを繰り返します。 i…

Pythonで円周率を小数第100位まで求める(2)

まずリスト同士の足し算の関数を作ります。5831.6591 + 6019.4723 を計算します。リストAUに5831.6591の整数部分を、ADに小数部分を入れます。同様にBU、BDにも値をセットし、plus(AU, AD, BU, BD, CU, CD)をコールするとCU, CDに計算結果が入ります。Uはup…

Pythonで円周率を小数第100位まで求める(1)

円周率を試しに計算してみることにしました。今はPythonをよく使っているので、Pythonで。何回かに分けてやってみます。世の中には50兆桁まで計算した人がいるそうです(ウィキペディア)!! 頑張ったなあ……。でも、ここでは計算の理屈を整理し、実験をやっ…

さて次に何を勉強しようか……(2)

Pythonでインタプリタを作る、ということで頑張っていました。仕事もあったし結構時間はかかりましたがようやく完成。関数機能はもちろん、1次元ですが配列も装備! インタプリタ作成は1回目にはC++で、2回目にはC#で、今回は3回目です。C++からC#のときに…

Pythonのforループのカウンタについて。ちょっと驚きました……。

Pythonの話です。次のプログラム、実行結果はどうなるかご存じですか? for i in range(10): print('i = ', i) if i == 3: i = 8変数 i の値を0,1,2,……と1刻みで増やしながら表示します。3になったら i の値は8にセット。そのまま、i が9になるまで繰り返…