開発

線形代数ライブラリEigenの遅延評価について

EigenはC++で書かれた線形代数ライブラリである。特徴の一つとして、式の実装にtemplate機能を活用している点があり、これにより 遅延評価 (lazy evaluation) を実現している。遅延評価を適切に使うことで、計算コストを削減できることがある。 Eigen Eigen…

対数正規分布 (log-normal distribution) の可視化

0よりも大きい値しかとらない確率変数*1について、その事前分布を設定するときに、対数正規分布 (log-normal distribution) を用いることがある。 Yuki Koyama, Issei Sato, Daisuke Sakamoto, and Takeo Igarashi. 2017. Sequential Line Search for Effici…

CMakeで管理するプロジェクトでEigen 3.Xを使うときのTips

Eigen 3.3以降 Eigen 3.3以降は find_package(Eigen3 REQUIRED) として、 target_link_libraries(mylibrary Eigen3::Eigen) とすれば良い。 Eigen 3.3以降に関する公式ドキュメント: eigen.tuxfamily.org なおmacOSのHomebrewで brew install eigen とする…

CMakeでビルドした実行プログラムのあるディレクトリにリソースファイルをコピーする

やりたいこと CMakeを用いてプロジェクトを管理しているときに、ビルドした実行ファイルと同じディレクトリ(またはそこから相対的に定義されるディレクトリ)に画像データ等のリソースデータをコピーしたいという状況を考える。 リソースファイルは、例えば…

オイラー角による回転行列の表現まとめ

免責・注意:本記事は、その正しさを一切保証しない。できるだけ出典を記すようにするが、特に、要出典・要確認等と書かれただけの箇所は注意が必要である。また、現時点では未完成で、随時追記・更新していくつもりである。 右手系・左手系について 座標系…

知覚を考慮した色差 CIEDE2000 とその実装

色差の指標 CIEDE2000 色差、つまり2つの色の距離を計算する方法はいくつかあるが、人間の知覚を考慮した指標である CIEDE2000 を用いるのが良いことが多い。 Color difference - Wikipedia 新しい色差式(CIE DE2000)について。-楽しく学べる知恵袋 | コニ…

macOSでCMakeを使ってビルドする際にQt 5へのパスを渡す

Qt 5をライブラリとして用いるプログラムをCMakeを使ってビルドする際、例えばQt 5 Widgetsを使う場合はCMakeLists.txtに find_package(Qt5Widgets REQUIRED) または find_package(Qt5 COMPONENTS Widgets REQUIRED) などと記述することになります*1。しかし…

追実装: Projective Dynamics (SIGGRAPH 2014)

この記事の概要 現在用いられる物理エンジンの多くは position-based dynamics (PBD) [Muller et al. 2007] を基礎としている *1 近年提案された projective dynamics [Bouaziz et al. 2014] は PBD より優れた性質を持っているらしい そこで projective dyn…

最適化計算アルゴリズムCMA-ESのライブラリlibcmaesを使ってみる

CMA-ESについて CMA-ES (Covariance Matrix Adaptation Evolution Strategy) は連続最適化アルゴリズムの一種です。日本語では共分散行列適応進化戦略と呼ばれます。進化戦略に基づいて、目的関数 を最小化する点 を計算するために使用されます。特徴として…

UnityのNative Pluginを作ってC++のコードやライブラリを使う

概要 UnityといえばC#で開発するのが基本ですが、Native Pluginという機能を使えば、他の言語 (C++など) で書かれたコードを呼び出すことができます。今回はじめてNative Pluginを作ってみたので、調べたことなどをメモしておきたいと思います。 C++のライブ…

論文読み: Position Based Fluids (SIGGRAPH '13) その2

実装してみた この記事は過去に書いた記事の続きです: yuki-koyama.hatenablog.comこれまで流体シミュレーションを実装したことが一度もなかったため、一度ぐらいやってみようということで、最近流行りの Position-Based Fluids(のようなもの)の実装に挑…

Multidimensional Scaling (多次元尺度構成法, MDS) の計算方法と実装

Multidimensional Scaling (MDS) について少し勉強したのでメモしておきます。 Multidimensional Scaling とは はじめに 日本語では「多次元尺度構成法」と呼ばれる統計テクニックの一つです。英語版ウィキペディアの記事が詳細です。多次元尺度構成法 - Wik…

論文読み: Solid Simulation with Oriented Particles (SIGGRAPH 2011)

今回は古い論文の紹介です。2年前にこの手法を実装したことがあるのですが、そのときにキャプチャした動画もいくつか紹介します。 Matthias Müller and Nuttapong Chentanez Solid Simulation with Oriented Particles SIGGRAPH 2011 研究概要 Position-Bas…

空の Subversion レポジトリを git-svn しようとすると失敗する

まだコミットが存在しない空の Subversion レポジトリに対して $ git svn clone [レポジトリの場所]を実行すると、clone 自体やその後の commit は成功するものの、push しようとすると Unable to determine upstream SVN information from working tree his…

RBF 補間 (Radial Basis Function Interpolation) の概要と実装

はじめに RBF 補間とは RBF 補間とは、RBF (放射基底関数, radial basis function) を用いて入力となる散布データ (scattered data) の値を補間することです。または、与えられた散布データを元に非線形な関数をフィッティング (または近似) することだと考…

Unity 上に自分で物理エンジンを実装したい

始めに断っておきますが、この記事には誤った内容や解釈が含まれているかもしれませんので注意して下さい。先日、ふとしたきっかけで初めて Unity 4 を触ってみました。そこで、どうしても Unity の組み込みの物理エンジン (Rigidbody など) を使わずに物理…

BVH 形式のファイルを読んで表示するプログラム (BVH Viewer)

スケルタルアニメーションについて調べる機会があったので、ついでに習作として簡単なプログラムを書きました。 ソースコード Xcode のプロジェクトを公開します。言語は C++ です。描画には OpenGL を使っています。Mac 向けですが、少ない修正で Windows …