以前の記事で利用したPoisson Surface Reconstructionのアルゴリズムを調べる前に2次元でポアソン方程式を解く手法について調べたところ、Poisson Image Editingを見つけた。この手法を3次元に拡張すると3次元メッシュも変形できる。
続きを読むCGALのサンプルを実行する(その2)
前回の記事に続いてCGAL 4.8 - Point Set Processing: User Manualを実行してみる。aptで拾ってきたcgalだとバグがあるようで型エラーが取れなかったのでgithubからダウンロードしたソースコードをビルドして利用した。
続きを読むRの並列化
Rも並列化で高速化することが可能らしい。使うパッケージとしてはRmpi、snow、pforeachがある。pforeachが一番後発なので多分使いやすいのだろう?
- Rmpi
- snow
- pforeach
2019/02/18 追記
parallel, foreach, dosnow, doparallel, snowfall, domc, furrr, future, future.batchtools, dompi など山ほど出てくる。
foreachパッケージをdoMCやdoSNOWパッケージと組み合わせて使うのが便利そうである。どちらを使うかであるが、foreach-based Parallelismを見ると
4.2. doMC: shared-memory parallelism 4.3. doSNOW: distributed-memory parallelism
とのことであり、doMCはそもそもWindows用のバイナリを配布していない。ということで、他の人に使ってもらうときはdoSNOW、自分で使うときは基本的にdoMC、クラスタを使うときはdoSNOWということにしておく。%dopar%
でだめなら%do%
にすれば並列化をoffにできる。
# doMC + foreach library(foreach) library(doMC) registerDoMC(cores=as.integer(system("nproc", intern=TRUE)) - 1) result <- foreach(i=1:10, .combine=c, .export=ls(envir=parent.frame())) %dopar% { myProc() } result
# doSNOW + foreach library(foreach) library(doSNOW, quietly=TRUE) library(parallel) # detectCores cluster <- makeCluster(detectCores(), type="SOCK") # cluster <- makeCluster(detectCores() - 1, type="MPI") registerDoSNOW(cluster) result <- foreach(i=1:10, .combine=c, .export=ls(envir=parent.frame())) %dopar% { myProc() } result stopCluster(cluster)
2019/02/19 追記
GPUも使ってみたい。R Language - GPU加速コンピューティング | r Tutorialを見るにnvidia製gpuならgputools、それ以外ならgpurを使うしかなさそう。openclパッケージはOpenCLをベタ書きするのでもはやRではない。
ガウス曲率K、平均曲率Hの計算
Differential Forms with Applications to the Physical Sciencesのp.48の6番でz=f(x,y)と表せるような曲面についてガウス曲率Kと平均曲率Hを求める問題がある。これをsympyでやってみる。
続きを読むメッシュ上の数値積分
- 実際にはメッシュの頂点上に与えられた離散的な関数を球面調和関数で展開する
- 球面調和関数は連続なのでできる限りその情報を失わないようにしたい
- 連続関数のメッシュ上での積分はガウス求積が一般的に用いられる
- ガウス求積 - Wikipedia
- ガウス=クロンロッド求積法 - Wikipedia: 誤差見積もりが必要な場合
- Simpson法だと3種類の係数で2次の精度→一般にN種類の係数でN-1次の精度(積分点が少なくていい訳ではない)
- ガウス求積だとN個の重みとN個の積分点で2N-1次の精度(積分点はN個だけ)
- 重みには球面調和関数に用いたルジャンドルの陪関数を使う
- 積分点はSimpson法だと均一に分布するのに対し、ガウス求積だと境界部分により多く分布する