Marupeke-IKD

ゲームプログラマを生業としています。「マルペケつくろ~どっとコム(http://mar…

Marupeke-IKD

ゲームプログラマを生業としています。「マルペケつくろ~どっとコム(http://marupeke296.com/)」という主にプログラマ向けの情報サイトを運営しています。「ゲームってどうやったら作れるんだろう…」という戸惑いにお答えできる情報を発信していければと思います。

マガジン

  • ビビッと感じる数学パズル

  • マルペケの徒然なるプログラムのお話

    ゲームプログラマである筆者が日々の業務や趣味の中で見つけたプログラム技術について、些末に書き連ねて行こうと思います。枯れた技術も今の技術もごちゃまぜのおもちゃ箱ですが、その中に皆様のお役に立てるものがあれば幸いです。

  • Oculus Quest 2 + UnityでVR開発

    Oculus Quest 2とUnityでVRな世界を開発する方法などについて解説します。僕が得た知識のアウトプットとして掲載しようと思いますので、更新頻度はインプットの量によります(^-^;。

  • Rustやろうぜ!

    C++級のハイパフォーマンスと近代プログラムの安全性を両立し、マルチプラットフォームで実行可能なアプリケーションを同一コードから作成できる魅力たっぷりなRust。クライアントもサーバも、組み込み系までもカバーする今注目のRustで色々遊んで学んでみましょう!

  • 地面に足つくゲームプログラム

    ゲームプログラムでの普遍的な技術・設計・実装方法をご紹介。膨大なコードやリソースが必要なゲームプログラムをより頑健にする、足元をしっかり固める情報を発信致します(^-^)

最近の記事

道をスムーズに繋ごう(問題)

 今上図のように途切れた直線道路があり、間を繋ぐ工事をする事になりました。工事は左下の直線道の先端S(0,0)から始め、右上の道の先端G(6,4)まで滑らかに繋ぐ予定です。滑らかに繋ぐ方法は色々考えられますが、今回は接続道の経路の座標を以下の式で計算する事になりました: tはいわゆる媒介変数で、t=0の時が左下のスタート地点S、t=1の時が右上のゴール地点Gで、0≦t≦1で接続道のある位置を表せるとします。先端SはX軸方向(1,0)を向き、先端Gは(-1,1)の方向に進入す

    • 道をスムーズに繋ごう(解説)

      問題はこちら: 答え:以下の式 問題の道をスムーズに繋ぐ経路は上式で計算できます。式内の係数をどう計算するか解説します。 解説:スムーズは「微分」で 今回の接続道の経路は以下の式で計算するとしました: 問題の条件を満たす係数a~fを求めるのが目的です。  まず曲線はt=0の時にS(0,0)を通るのでt=0を代入してみます: 係数cとfがそれぞれゼロなのがわかりました。  t=1の時曲線はG(6,4)を通ります。同様にして、 aとbそしてdとeの関係が出てきました

      • あまりに難し過ぎた伝説の図形問題(問題)

         ジュニア算数オリンピックは小学5年生までの小学生が挑戦できる算数の競技試験です。1992年から毎年開催されていて、世界中の小学生がチャレンジしています。出題される問題は、小学生の算数の範囲で解けるのですが、大人でも舌を巻くレベルの高難易度。その為試験を受けるのは算数が極めて得意な小学生が殆どのようです。  今回はそんな難問揃いの中から平成9年のジュニア算数オリンピックで出題された伝説の問題にチャレンジです。ずばり上の図のxの長さを求めて下さい。  この問題、参加した小学

        • あまりに難し過ぎた伝説の図形問題(解説)

          問題はこちら: 答え:5.5cm 図のxの長さは5.5cmになります。なぜそうなるかを以下で解説しますが、算数の範囲でこれをノーヒントで導くのは本当に難しいです。まずはその算数の範囲で解く方法を、その後に中学数学の範囲での解き方、高校数学の範囲での解き方をそれぞれ解説します。 算数の範囲で解く 図を見た時、使えそうな特徴が2つあるのがわかります。一つは底辺が2等分されている事、そして∠ADCが135°の有名角になっている事です。  底辺2等分は頂点から中点に線を引いて三

        道をスムーズに繋ごう(問題)

        マガジン

        • ビビッと感じる数学パズル
          195本
        • マルペケの徒然なるプログラムのお話
          47本
        • Oculus Quest 2 + UnityでVR開発
          5本
        • Rustやろうぜ!
          7本
        • 地面に足つくゲームプログラム
          12本

        記事

          折り紙の中に面積1/2の正方形を作ろう(問題)

           今回はシンプルな折り紙の問題。  今1辺が1の正方形の折り紙があります。この折り紙を折って、その折り跡で面積1/2の正方形を作って下さい。ただし折り方のルールがあります。 定規等で長さを測るのはNG 辺と辺を合わせて折るのはOK 角と辺、角と角を合わせて折るのはOK 折り目が交差している所(辺と折り目も含む)は交点として利用できる。交点と角を合わせて折る、交点を通るように折り目を付けるのはOK。 以上です。要はちゃんと跡に残った目印となる物に沿って折るのはOKと

          折り紙の中に面積1/2の正方形を作ろう(問題)

          折り紙の中に面積1/2の正方形を作ろう(解説)

          問題はこちら: 答え:解説の手順で折る 一辺が1の正方形の中に面積1/2の正方形を折り目で作る事はできます。おそらく複数の解答があると思いますが、ここでは僕が思い付いた方法を解説します。 解説1:一辺が√2/2の正方形を目指す 面積が1/2の正方形という事は、一辺の長さLは、 です。この長さを見つければ答えにぐっと近付きます。幾何学で√2は割と簡単に作れます。そう、直角二等辺三角形の辺の比が1:1:√2でしたよね。これがポイントになりそうです。 解説2:十字に追って斜

          折り紙の中に面積1/2の正方形を作ろう(解説)

          円周率の日記念、小さい円の面積は?(問題)

           今日は2024.3.14。3月14日は、3.14、つまり円周率の日です。という事で円周率の元である円の問題を考えてみました。  上図の大きな円の半径は3です。中ぐらいの円2つは合同で、図のように上下2つだるまのように互いに外接していて、大きな円とも内接しています。この中くらいの円はこういう接し方が可能な一番直径が大きな円とします。そして緑色の一番小さな円は大きな円に内接、中ぐらいの円2つに外接しています。さてこの時、小さい円1つの面積はいくつになるでしょうか?  この問

          円周率の日記念、小さい円の面積は?(問題)

          円周率の日記念、小さい円の面積は?(解説)

          問題はこちら: 答え:π 小さい円の面積はπになります。円周率の日記念ですから、この答えが欲しかったww。どのように求めるか解説します。 解説:接する円の性質と三平方の定理で 求めたい緑の円の半径をxとします。このxを求める為に補助線を幾つか引いてあります。本当はこういう補助線が引ける根拠をちゃんと示さないといけないのですが、それは深堀に回すとしまして(^-^;、まずはある程度自明として答えまでの道筋を進む事にします。  点Aは大きい円の中心、点Bは中くらいの円の中心で

          円周率の日記念、小さい円の面積は?(解説)

          皆既日食に至るまでの被覆率は食分でどう変化する?(問題)

           皆既日食は太陽がその前を通る月によって覆われる天体現象です。  こちらの写真、これは2012年5月21日朝7時32分の東京の空で実際に観察された金環日食を僕が撮影したものです。当時東京は曇り空で、最大食になる直前まで太陽は厚い雲の後ろに隠れて見えませんでした。時計を見つめながら「だめか…」と思った瞬間、わずかな雲間から太陽が!レンズに取り付けたフィルター越しでは光量が足りず、慌ててフィルターを取り外し直撮りしたのをよく覚えています。人生で初めて見た金環日食は本当に神秘的で

          皆既日食に至るまでの被覆率は食分でどう変化する?(問題)

          皆既日食に至るまでの被覆率は食分でどう変化する?(解説)

          問題はこちら: 答え:以下の式 皆既日食で食分Lに対する被覆率Rは上式となります。この式をどう導出するか解説します。 解説1:扇形から三角形の面積を引く 今回の問題を図で確認してみましょう:  月と太陽の見かけの直径を1としておきます。こうする食分Lが0~1の範囲になって便利です。月の中心をP、太陽の中心をQとし、交点をA、Bとします。被覆率は図の赤線で囲まれた面積を円の面積で割れば求まります。  この赤線の領域は図の対称性からオレンジの領域の倍の面積になっているのは

          皆既日食に至るまでの被覆率は食分でどう変化する?(解説)

          Welzlの最小球アルゴリズムを非再帰で実装する

           前回Welzlの最小球アルゴリズムの理屈を説明しました:  最終的なアルゴリズムはシンプルなのですが、非常に激しい再帰呼び出しが起こる為、点群の数が増えるとすぐにスタックオーバーフローを起こしてしまいます。よってこのアルゴリズムを実用するには再帰しない形に直さないとちょっと実用に耐えないんですね。  そこで今回は非再帰なWelzlアルゴリズを実装してみようと思います。 単純にスタックするのは無理がある 関数が呼び出される時に引数と関数内のローカル変数がスタックメモリに

          Welzlの最小球アルゴリズムを非再帰で実装する

          Welzlの最小球アルゴリズム(理屈編)

           沢山の点(点群)を囲う最も小さい円(3Dなら球)を求めたいという要求は色々な局面で見られます。例えば距離センサーが返す大量の点群を覆う境界球を知りたいとか、ゲーム内にあるメッシュの衝突判定の第1カリング(詳細な衝突を行う前の粗いカリング)のために境界球を求めたい場合など。  この割と古典的な問題に対して様々なアルゴリズムが提案されてきました。その中でWelzlが1991年に発表した論文「Smallest enclosing disks (balls and ellipso

          Welzlの最小球アルゴリズム(理屈編)

          4点を通る球を求める

           3次元空間に球を定義する時、普通は中心点の座標と半径を設定します。ただゲームプログラムや3Dメッシュを扱うコードを組んでいると、そうではなくて球が通る点の座標だけはわかっていて、そこから球の中心点と半径を逆算したい事もあります。  3次元の球を決めるにはその表面に点が4つ必要です。なぜ4つかと言うと方程式の中に未知のパラメータが4つあるためです:  上式で(x, y, z)は球面上の点の座標で、これは変数です。一方(cx, cy, cz)は球の中心座標、rは半径でどちら

          4点を通る球を求める

          ピラミッドを包む円の半径は?(問題)

           今回はピュアな幾何学の問題です。  正方形のブロックを上図のようにピラミッド状にn段積み上げます。このピラミッドの高さを1とし、それに外接する円を描きます。この円の半径を段数nで表して下さい。  この問題は中学生以上で解く事が可能です。中学生の皆さんはいきなりn段で考えると難しい所もあるかもしれないので、2段や3段などの少ない段数であれこれ試してみると手筋が見えてくると思います。高校生以上の方はnが無限に増えた時の事も考えてみて下さい。 ※解説はこちら その他の問題

          ピラミッドを包む円の半径は?(問題)

          ピラミッドを包む円の半径は?(解説)

          問題はこちら: 答え:以下の式 n段の正方形で構成されている高さ1のピラミッドを包む外接円の半径は上式で算出する事ができます。解法は多分色々あると予想しますが、ここでは僕が見つけた2つの方法を解説します。 解法1:連立方程式を使って解く まずは以下の図をご覧下さい:  n段で高さ1のピラミッドを覆う外接円には中心点Oがもちろんあります。ピラミッドは左右に線対称なので、中心点Oは赤線で示したピラミッドの中心線上のどこかにあります。ピラミッドは一番上のブロックの上隅と底面の

          ピラミッドを包む円の半径は?(解説)

          マイクラで100段のピラミッドを作る時に必要なブロックの数(問題)

           マインクラフト(通称マイクラ)というゲームがあります。世界のすべてが立方体のブロックで構成されていて、ブロックを好きなように積み上げて自由に地形や建物を作る事ができる世界的に人気のゲームです:  そんなマイクラでもっぱら建物を作るのが好きな健治君。ある日ピラミッド建設に挑戦してみる事にしました。どうせ作るなら巨大なのと掲げた目標は高さ100段。立方体のブロックを文字通りピラミッド状に積み上げるわけですが、健治君は見た目の綺麗さから下のような建築方法を採用する事にしました:

          マイクラで100段のピラミッドを作る時に必要なブロックの数(問題)