tak0kadaの何でもノート

発声練習、生存確認用。

医学関連は 医学ノート

方向統計学で出てくる分布

球面上の分布をKL-divergenceで比較できないか調べ物をしていていくつか分布を見つけた。指数分布族であり、正規分布と似た表記になっている。画像検索で分布の雰囲気を調べていると、一峰性の分布の絵が出てくる。ガウス平滑化のような使い方が出来れば良いのかもしれない。

使うとしても結構先になりそうなので深入りするのは止めておく。

vim-lspとaleのインストール

YouCompleteMeをC++のためにインストールしていたが、Vim弱者のため設定が直せなくなってprabirshrestha/vim-lspw0rp/aleに乗り換えた。vim-lspもaleもコードの解析にclangdを利用しており、compile_flags.txtというファイルを置いておかないと、デフォルトの-Wall -std=c++14が採用されC++17以降の機能を使うとエラーが出る。vim-lspについてはカレントディレクトリにcompile_flags.txtを置いてやると自動で読み込んでくれるが、aleについてはその方法では解決しないため、g:ale_cpp_CXX_optionsを設定してやる必要がある。また、vim-lspについてはvimのvirtualtextという機能を使ってエラー表示をインラインにしてくれるが、これもちょっとうるさいので出ないようにした。

続きを読む

空間分割アルゴリズム

三角形に分割された閉曲面(球面)と複数の半直線があったとき、それぞれが交差するかどうかの判定をしたい。レイトレーシングで使用されるようなアルゴリズムとしてはBVH、Quadtree、Octreeなどが見つかった。

BVH (Bounding Volume Hierarchies)は、領域を木構造に分割して、AABBという直方体との交差判定を行うことで、オブジェクトとの交差の判定回数を減らす方法である。この方法は、疎にオブジェクトが散らばっている場合、木構造が容易に定まり、光線の大半はオブジェクトと交差しないため特に有効だと思われる。

今回の状況を考えると、三角形は球面を全て埋め尽くしているため半直線は必ずいずれかの三角形と交差すること、頂点の座標は極座標で与えれば2次元であることが特徴的である。四分木を用いて三角形を含む「長方形」を事前に処理しておくのが良さそうである。

(とはいえ実装は出来れば回避したく、たぶん使わないのでこのページは開きすぎたタブの供養にあたる)

続きを読む

三角メッシュ用のライブラリ書いた

GitHub - tak0kada/cnthd: Halfedge data structure for triangular mesh
ハーフエッジデータ構造のC++ライブラリ。面の向き付けがバラバラなファイルに対応しようと思っていたがバグを出してしまって(しかもそれほど使わない機能)書き直す時間が惜しいのでまともなファイルが来るのが前提になっている。テストもいい加減で目視で確かめただけである。以下は使用例。

続きを読む

多次元尺度構成法(MDS)メモ

  • 多次元尺度構成法は複数の要素の間で距離(あるいは距離に類似したもの)が計算できる時、それを用いてデータの数より低い次元を指定して、その次元にデータを配置する手法。
続きを読む

球面調和関数係数で表された物体の回転推定

A Robust Method for Rotation Estimation Using Spherical Harmonics Representation - IEEE Journals & Magazineを実装した。以下はコードを貼り付けたのみ。

続きを読む

n単体の作り方

$(1,1,\ldots,1)^{t}$をQR分解して得られるQ因子は直交行列でかつ、1列目が等しい。ここからn個のn-1次元行ベクトルを取ると、n単体が得られる。 お気持ち証明としては、n個の正規直交基底を、ある1つの次元$z$の値が同じになるように取って、その後その次元$z$の向きに正射影したものを考えるとそんな気がしてくる。

# https://mathoverflow.net/questions/38724/coordinates-of-vertices-of-regular-simplex
simplex <- function(n) {
    qr.Q(qr(matrix(1,nrow=n)),complete=T)[,-1]
}