bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

2014-01-01から1年間の記事一覧

シューティングゲーム手習い:鳥も参加

1.石と鳥の軌跡 今回はこの動画のように機能するプログラムを作成する。 今、角度\(\theta =tan^{-1} \frac{v_{y_0}}{v_{x_0}}\)、速度\(\sqrt{v_{x_0}^2 + v_{y_0}^2}\)で石を投げた(\(x\)方向、\(y\)方向の速度成分がそれぞれ\((v_{x_0}\),\(v_{y_0})\)…

シューティングゲーム手習い:投石プログラムを整理する

1.投石ゲーム 原始的だが、投石で鳥を落下させるゲームの設計を目指して、基本的な部分を作成する。まずは、前回の記事で作成したプログラムを整理する。 一つは、位置、速度、加速度はそれぞれ\(x\)方向と\(y\)方向を別々に記述していたが、プログラムを…

物理的なモデルに基づいてゲームを開発する:ボールを投げる

1.落下するボールのプログラムを応用する 今回のプログラムを実行すると次のようになります。 落下するボールのプログラムができれば、シューティングゲームなど幅広い分野に応用することができる。ここでは、ボールを投げたときの軌跡を求める。今、ボー…

物理的なモデルに基づいてゲームを開発する:落下するボールをバウンドさせる

1.FRPを本格的に 今回のプログラムを実行すると次のように動きます。 今まで書いたプログラムでは、落下する物体は地面をも突き破ってどんどんと地下のほうに落ちていく。これでは非現実的なので地表面で跳ね返るようにする。即ち、\(y=0\)の時、\(v_t\)は…

物理的なモデルに基づいてゲームを開発する:将来の発展のために

1.mainの部分を本格的に reactimateは簡便で便利な関数だが、落下するボールをマウスで操作したいなどインタラクティブな操作を加えるときは、不向きである。そこで、ここでは将来の拡張に備えて、reactInitとreactを用いて、mainの部分を書き換える。コー…

物理的なモデルに基づいてゲームを開発する:OpenGLで描画

1.落下する物体を描画する 前回の記事で、FRPを用いて落下するボールの刻々と変化する高さと時間を数字で出力した。ここでは、直感的に分かりやすくするために、GLUT(The OpenGL Utility Kit)を用いて、描画する。コードは同じようにJekorが動画で説明した…

物理的なモデルに基づいてゲームを開発する:FRP事始め

1.ゲームとエンジンの紹介 日本では、フリー・モナドやオペレーショナル・モナドがゲームのエンジンに向いているとひところ話題になっていた。一方、海外では関数型リアクティブ・プログラミング(Functional Reactive Programming:以下ではFRPと省略する)…

見やすくするならレコード

1.タプルとレコード 複数のデータで一つのデータが構成されるということがよくある。製品と部品、団体とメンバーなどがその例である。タプルは構成要素となっているデータを列挙することで、複合的なデータを表すことができる。しかし、プログラム作成後時…

サンタンデールとビルバオ

1.サンタンデール サンタンデールで国際会議があり、発表のためスペインの北部のカンタブリア地方とバスク地方を訪れた。国際会議が開催された場所は、サンタンデール市のマグダレーナ宮殿。アルフォンソ13世によって1900年代初頭、建てられた夏の宮…

接着関数-路線網(出発駅と到着駅間の駅数)

1.出発駅と到着駅間の駅数を求める 出発駅から到着駅までのおよその所要時間はその間の駅数で分かる。まず同一路線の場合は駅に付けられた番号の差となる。従って、次のようになる。 stat0' :: Source -> Destination -> Int stat0' sor des = abs $ snd (…

接着関数-路線網(乗換駅)

1.乗換駅 三つの路線だけだが路線網を求めることができた。そこで、この路線図を利用して乗換駅を求めることにする。乗換数ごとに関数を作ることとし、入力は乗車で用いる路線line1、下車で用いる路線line2、さらに路線網networkを入力し、乗換駅のリスト…

接着関数-路線網

1.接着関数 部品を結合して製品にしたり、サブルーチンを集めてプログラムを作成したり、課をまとめて部にしたりなど、物理的な結合や概念的な結合は日常茶飯事に発生する。このような結合は、数学的には、接着関数として次のように定義される。接着空間:…

小学生に戻って旅人算(内包表記、遅延評価)

1.旅人算 流水算と似た問題に旅人算がある。旅人算には、①出会うときを求める問題と②追いつくときを求める問題の二種類がある。前者は、離れたところから二人の旅人が相手の方向に歩く場合である。後者は、一人の旅人が先に出発し、別の旅人が先の旅人を追…

ガタガタ(型々)とうるさい複素数

1.分野向けの型を作成する Haskellでは、整数や小数などの一般的な型は提供しているが、それぞれの応用分野で用いられる型は用意してない。電気・電子の分野では複素数で表すと便利な時があるが、Haskellでは複素数は残念ながら用意していない。ここでは、…

ガードをかためて連立方程式を解く

1.場合分け 答えを導くのに、場合分けしたいときが多い。前の記事で説明したパターン照合も一つだが、もう一つの方法にガードがある。今回は連立方程式を解くときに、ガードを用いることとする。 2.連立方程式 連立方程式は、 \begin{align*} ax + bx = …

流水算を解く(TypeとTuple)

1.流水算とは 小学校の頃を思い出して、今回は、流水算。川を上り下りする船の所要時間を知って、川の流れの速さと船の静水時の速さ(水の流れがないときに船が進む速さ)を解く問題である。この問題には、前提があって、次の式が成り立っていると想定してい…

オペレーショナル・モナドを解剖する(3)

1.現実の世界へ プログラムとプログラムをつないだらプログラムだという世界を作るために、これまでの論理の世界から、一気に、現実の世界へ移行することとする。プログラムと命令の境目を明確にするために、現実世界での命令を定義する。そのベースになる…

オペレーショナル・モナドを解剖する(2)

1.論理の世界から現実の世界 プルグラムは命令の並びであるが、プログラムとプログラムを接続したものも、またプログラムである。プログラムを命令の集まりとみなしている間は論理の世界で閉じているが、プログラムの並びをプログラムとみなすと、論理の世…

オペレーショナル・モナドを解剖する(1)

1.論理の世界 前回の記事で、米田の補題との関連を述べたが、オペレーショナル・モナドの命令の実行部分については詳しくは触れなかった。今回は、オペレーショナル・モナドの解釈・実行部分、プログラムではiterpretと記述、の部分について説明する。例に…

Haskellプログラミング講座(入門編) - 目次 

1.リスト内包表記を利用して鶴亀算を解く 2.無限数列を再帰的に定義する 3.リスト内包表記を利用して順列・組合せ問題に取り組む 4.パターン照合で並べ替え 5.型があってのHaskell 6.流水算を解く(TypeとTuple) 7.ガードをかためて連立方程式…

米田の補題とオペレーショナル・モナド

1.復習:米田の補題 米田の補題をHaskellで記述する方法については、Haskellの真髄に迫る-一般化代数的データで論じた。米田の補題は次のように定義されていた。 \({\mathcal C}\)を圏とした時、任意の\({\mathcal C}\)の対象\(A\)と関手\(F: {\mathcal C}…

Haskell入門 型があってのHaskell

1.コンパイルできれば完了 Haskellは静的型付けき言語である。このおかげで、信頼性の高いプログラムを作成できる。CやJavaでプログラムを作成するとデバッグに多くの時間がとられる。Haskellだとそのようなことはない。コンパイル出来た瞬間にプログラム…

Haskell入門 パターン照合で並べ替え

1.思い出 昇順に並べ替える問題(ソート)は、カリフォルニア大学のバークレイ校で学んでいるときに、プログラミングの授業の中で出会った。とは言っても、今の時代のように、JavaやCなどの高級言語がない時代で、機械語に近いアセンブリ言語を用いてのプ…

Haskell入門 リスト内包表記を利用して順列・組合せ問題に取り組む

1.好きになれなかった順列と組合せ 順列と組合せは高校生の時に学んだが、数学のほかの分野と異なり、これだけは孤立していて、また、その後の学問的発展も見られそうになかったので、興味のわかない分野であった。後に、確率・統計学も学ぶことになるが、…

Haskell入門 無限数列を再帰的に定義する

1.数列 リストは多様に解釈できる。前の記事の「リスト内包表記を利用して鶴亀算を解く」では、リストを集合と見なした。今回は、リストを数字の並びとみなすこととする。数字の並びは、通常、数列と呼ばれる。高校で、等差数列、等比数列を学んだ事と思う…

Haskell入門 リスト内包表記を利用して鶴亀算を解く

1.頭の体操 ウィキペディアによると、鶴亀算は中国の数学書「孫子算経」の中にある「雉兎同籠」(雉:キジ、兎:ウサギ)が始まりとされている。これが江戸時代になって、目出度い動物である鶴と亀に変わったそうである。小学校の時代に解いた経験を持つ人…

オペレーショナル・モナドで天国と地獄を行ったり来たり(4)

:1.リストの要素をキーボードから入力する「Haskellで分野向けの機械を開発する(3)」で行ったように、オペレーショナル・モナドの拡張版(モナド変換子)を用い、キーボードからリストの要素を入力できるようにする。プログラムListPは命令実行結果aがモ…

オペレーショナル・モナドで天国と地獄を行ったり来たり(3)

1.長さを帰納的に表現した注釈つきリスト 元に戻って、リストの長さを整数ではなく帰納的表現でのリストの生成法を考える。最初に自然数Natを代数的データ型で定義する。 data Nat n = Z | S (Nat n) deriving Show ここで、Zは自然数の始まりを示し、S (N…

オペレーショナル・モナドで天国と地獄を行ったり来たり(2)

1.長さが整数のプログラムを作成 長さ注釈つきリストの構造がはっきりと分かるようにするために、前回の説明とは異なるが、長さを整数で直截に表したリストを用いる。そこで、リストをあるものの並びと並んでいるものの数(長さ)で表すこととし、リストをレ…

オペレーショナル・モナドで天国と地獄を行ったり来たり(1)

1.リスト処理を見やすく 前回の記事で米田の補題を説明するためにリスト処理を用いたが、だいぶ難解であったことと思う。ここでは、リストの構造を見える形にし、オペレーショナル・モナドを用いたときに、リストの処理がどのようになるかをできるだけ分か…