第166回 PHP勉強会@東京 https://phpstudy.connpass.com/event/323312/
―圏を関係付き箙(クイバー)で表示する方法によって、小さな圏を手作りし、圏のなかで起こっていることを可視化する― 本書では、圏を関係付き箙(クイバー、有向グラフ)で表示し、その集合表現(前余層)とその間の射を図示する手法を用いて、圏論における様々な概念を視覚的に捉える例を作る。本書で目指しているのは、それにより、圏論を理解しやすくすることである。 本書を読むための予備知識としては、集合と写像、集合の上の同値関係と類別の程度を想定している。 圏だけではなく、関手(集合表現)や自然変換をも、箙表現の構造箙を用いて視覚的に取り扱う方法を紹介している点は、本書の大きな特徴である。これによって、特に極限や余極限の理解は劇的に容易になり、豊富な例を作ることができるようになる。本書の後半で解説している随伴関手は、その最初の練習教材として用いることができる。随伴関手については、自然同型を表す竹内外史の著書
ゲーム作りとかCGに関わる数学(初歩)③ この辺から、理系の高校~大学教養課程くらいのレベルの話になってきます。ちょ~っと難しいかもしれないけど頑張りましょう。 微分積分 ここは実は微分積分をやってくださいというリクエストがあったので入れてみました。 人によっては「え?ゲームプログラミングに微分積分とか使うの?」という現役のゲームプログラマの方もいるかもしれませんが、実は必要なんですよ。 高校でやる試験問題を解くみたいな事はしませんが、概念の理解は必要になります。 そもそも速度加速度にかんしても微分や積分の概念ですしね。 極限について 極限…この辺も、厳密な話をしだすと割と大変な話になっちゃいますので、一般的な高校で教えるような極限の話をしますね。極限と言えば、lim(limitの略ね)なんですがこれは などのように書いて、limの下に書いてある変数を右側の数字に「限りなく近づける」という
経度と緯度の角度でランダムの単位ベクトルを求める。 経度は0~2π(0~360度)をランダムに選べば大丈夫ですが、緯度のほうはランダムに選ぶと問題があって、北極と南極の部分の表面積が赤道の部分に比べて小さくなるので、一様分布で乱数を振ると極に密集してしまうことになる。なので、乱数に対して面積に比例した重みをつける必要がある。 表面積の比は微分するイメージで、輪切りで細かく分割すると円周の長さの比になると考える。円周の長さの公式が2*πrなので、赤道から極までの円周の比はつまり半径の比になる。半径は三角比で求めるとcosΘになるので、つまり側面から見た輪切りの円周の長さはコサイングラフになる。 コサイングラフが面積比となり、面積比=確率とみなすので、グラフは確率密度と捉える。たとえば60°の角度のところはcos(60°)=0.5なので赤道に比べて面積が半分ということになる(赤道の半分ぐらいし
「Immersive Math」は、数学のうちベクトルや行列などの計算を研究する分野である「線形代数」についてインタラクティブな図を用意することでわかりやすさを向上させた無料の教科書サイトです。 Immersive Math https://immersivemath.com/ila/index.html サイトのトップページはこんな感じ。「完全にインタラクティブな図を備えた世界で最初の線形代数本」と述べられています。 中央に表示されている三角形の図はインタラクティブで、左上をクリックすることで回転・停止を切り替えられるほか、各頂点をクリックしてドラッグ&ドロップすることで位置を調整可能。自由に図を編集できるため理解しやすいというわけです。 ページをスクロールすると目次が現れました。まずは「Preface(序文)」をクリック。 「『百聞は一見に如かず』という言葉の通り、たくさんの言葉を重ね
本記事では、カルマンフィルタの基礎について解説しました。 解説動画も出していますので、ぜひご覧ください! カルマンフィルタのモチベーション センサーからの情報には多くのノイズが含まれており、これをそのまま利用することは好ましくありません。目指すべきは、ノイズのない、真の情報を把握することにあります。しかし、このノイズフリーな状態を直接得ることはできません。このため、目に見えない「隠れ状態」としてこれを推定する必要があります。これについては、ベイズフィルタに関する以前の記事で状態推定問題として触れましたが、ベイズフィルタはその理論的基盤を提供するものであり、実際の実装にはコンピュータで扱える形式に落とし込む必要があります。カルマンフィルタは、この要求を満たす形でベイズフィルタの概念を実用化したものです。 ベイズフィルタについて知りたい方は以下の記事を参考にしてください。 ベイズフィルタによる
はじめに 浮動小数点数、なんとなくはわかっているものの実は理解がちょっと曖昧、という方いませんか? 僕は恥ずかしながら長らくそんな状態でした。 特に誤差と精度についてはかなり曖昧で、 「どれくらいの数値であればどれくらいの精度があるのか」 という点は全く自信がありませんでした1。(業務上、特に困ったこともなかった) この記事は、試しに4ビットの浮動小数点数を作ってみることにより、浮動小数点数の精度を理解することを目指します。 想定の読者さんは、 「浮動小数点数に関してはざっくり分かっているけど、実は精度や誤差に関してはちゃんと理解していない」 という方々です。具体的に言えば、緯度経度を32ビット浮動小数点数で表すと誤差がどれくらいになるのかがあまりピンと来ない2、という方などです3。 浮動小数点数の概要 ここでは、ざっくり浮動小数点数の概要に関して復習程度に触れます。 概要は分かっていると
お近づきになりたい人向けシリーズです。 いろいろなトピックを詰め込みましたが、「これら全部を知らないといけない」のようなつもりではなく、いろいろなことを知るきっかけになったらいいなという気持ちなので、あまり身構えずにちょっとずつ読んでもらえたらうれしい気がします。 まえがき 予備知識 規格 用語 精度という語について 記法 表現について 有限値の表現について エンコードについて 丸めについて よくある誤差や勘違いの例 0.1 = 1 / 10? 0.1 + 0.2 = 0.3? 整数の誤差 Rump’s Example 基本的な誤差評価 用語に関して 実数の丸め 有理数の丸め 基本演算の丸め 差について 複数回の演算 補題たち 桁落ちについて Re: Rump’s example 融合積和 数学関数に関する式の計算 誤差の削減に関して 総和計算 数学関数の精度について 比較演算について 雑
VRゲームの開発時に遭遇した衝突判定のトラブルについて解説していきます.環境はUnityを想定していますが,UEやGazeboなどの他のシミュレーション環境でも発生する一般的な問題です. 衝突判定の基本 Unityの接触判定はUnity内の物理エンジンで行われている. 物理エンジンはRigidBodyとColliderの両方を持ったオブジェクト同士の接触を判定している. 衝突判定にはDiscreteとContinuousの2のモードがあり,Continuousモードはさらに細かく別れている. 高速で動いているオブジェクトはColliderが断続的にワープしている状態になる.ワープ中にすれ違った物体は接触指定なので判定されない(Discrete). 上記のワープの問題に対処するために連続型衝突検知機能(ContinuousやContinuous Dynamic)が用意されている. 何が起こっ
本記事では、二次元放物形偏微分方程式の数値解法について、分かりやすい具体例とともに掘り下げていきます。Pythonを活用したアプローチ方法を学びます。 本記事を通して偏微分方程式の数値解法の1つを会得しましょう! 注) 差分法の一部の話だけにとどめています。誤差や境界条件などの詳細な議論は冗長化を避けるためにご紹介していません。 偏微分方程式の数値解法とは 偏微分方程式の数値解法は、偏微分方程式(PDE: Partial Differential Equations)の解を近似的に求めるための手法のことを指します。これらの方程式は、多くの場合、解析的な解が見つけられないため、数値的な手法が必要となります。以下に、主な数値解法をいくつか紹介します。 有限差分法(Finite Difference Method): 空間や時間を離散的なグリッドに分割し、微分を差分に置き換えることにより近似しま
ゲーム作りとかCGとかに関わる数学(初歩)② この記事は2023年アドベントカレンダーの12/24の記事 の続きです。前の記事を読んでない人は前の記事を読んでおいてください。で、良ければいいねとストックもしておいてくださいw 前回は時間がないのと、数式多めのせいかブラウザが編集中に何度も落ちるので切りましたので、その続きを書いていきます。 今回のもブラウザが頻繁に落ち始めたらそこで切ろうと思います。やっぱり数式は負担が大きいのかな? では、ベクトルの続きからやっていきましょう ベクトルの続き… 2点を結ぶベクトルを作る これは分かり切っているし、前回も説明してるのですが一応おさらいとこの後の話の伏線もこめてお話しします。 点Pから点Qに向かうベクトルを作りたいとします。このとき、これを覚えておいてください 「終点から始点を引く」 と。つまりPからQに向かうベクトルを作りたい場合は単純にQ-
// 位置の補間 var currentPos = Vector3.Lerp(positionFrom, positionTo, minJerkTrajectory(t)); // 角度の補間 var currentRot = Quaternion.Slerp(rotationFrom, rotationTo, minJerkTrajectory(t)); かんたんに使うときの注意点 (1) ここで紹介した式は2点補間にしか使えない。「静止状態」で始まって「静止状態」で終わるという条件で躍度最小軌道を求めると 6t^5 - 15t^4 + 10t^3 が出てくる。これ以外のケース (たとえば、最初から動いた状態で始まる、複数点を経由するなど) では、別の式が躍度最小軌道になる。各条件での導出方法とリアルタイム計算の方法は、このあと解説していく。 (2) 外からかかる力が考慮されていない。た
ゲーム作りとかCGとかに関わる数学(初歩)① 今回HIKKYさんのアドベントカレンダーに投稿するにあたって、別の温めてたネタはあったんですが諸事情により封印してしまったので、何か別のテーマにしようと考えました。 で、色々考えたのですが、特に思いつかなかったのでCG数学の初歩的な話をしようかなと思います。実際VKetCloudの中でも基本的な数学は必ず使われてますし。 あと「ゲームメーカーズ」さんの記事でも取り上げていただいた、僕のCEDEC+KYUSHU2023の数学のお話がやたらとウケがよかったため、数学の話で行くことにしました。 で最初に書いておくと、書きたかったことの半分もかけていません。 時間の都合上と、あと数式と頭が多すぎるのか、このドキュメントの編集が何度も落ちるからです。 と言うわけで、今回は概要と三角関数とベクトルの話だけにします。 あとは年末年始休みの間にでも続きを書きま
1. はじめに 波の動きを作るために Gerstner Waves というものがあります。 上記のサイトで詳しく知ることができます。他にも先人の技術ブログがいくつもあるのでそちらも参考になるかと思います。 自分で実装してみて「なるほど!!すごい!!」と思ったので、昔からある技術ではありますが今回は私なりの解説で紹介してみたいと思います。 実装はUnityのサンプルプロジェクトをGithubに公開しています。 2. 波の合成 まずは Gerstner Waves でも基本となる波の性質についてです。波の合成は「重ね合わせの原理」として高校物理で習った記憶があります。覚えてる方もいると思いますが、おさらいとして簡単に触れておきたいと思います。 よく物理の調べ物でお世話になる金沢工業大学さんのページを貼っておきます。 波の合成の図を用意しました。 赤色: Sin波1 青色: Sin波2 緑色:
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く