2009年5月23日土曜日

粒子法のプログラム第4回(密度と圧力の計算)


今回は、粒子法のプログラムでどのように密度と圧力を計算しているかを説明します。

粒子の密度と圧力の計算は次のコードになります。
void calculate_density_and_pressure( Particles* ps )
{
double r2, c, sum, H2;
vec dr;

H2 = H*H;

FOR_EACH_PARTICLES( ps, p )
{
sum = 0.0;
FOR_EACH_PARTICLES( ps, pj )
{
if ( p == pj ) continue;
dr = (p->r - pj->r) * SPH_SIMSCALE;
r2 = norm2( dr );
if ( H2 > r2 )
{
c = H2 - r2;
sum += c * c * c;
}
}
p->rho = sum * SPH_PMASS * Poly6Kern;
p->p   = ( p->rho - SPH_RESTDENSITY ) * SPH_INTSTIFF;
p->rho = 1.0 / p->rho;  // take inverse for later calculation
}
}

それぞれの粒子について、影響半径内にある自分以外の粒子に対して、距離に応じて重みを足し合わせています。そのあと、足し合わせた重みに、粒子質量についての係数とカーネル係数をかけています。密度が計算された後、圧力を密度から計算します。

上のやり方だと、計算量のオーダーは、各粒子について他の粒子それぞれとの計算になるので、粒子の数をnとするとO(n^2)となります。しかし、影響半径外の粒子との計算は不要なので、他粒子すべてと計算する必要は本来ありません。なので、近傍粒子をあらかじめマップに入れておき、それを参照するようにすれば、計算量をO(n)にすることができます。

また、粒子pと粒子pjについて対称なので、その対称性を利用すれば、計算量をさらに半分にすることが可能です。

密度と圧力は、このように計算されています。いったん素直な実装になっていますが、上の2つの点で高速化することができます。

次回は、粒子にかかる力をどのように計算しているかという説明です。

粒子法のプログラム
粒子法のプログラム第1回(概要)
粒子法のプログラム第2回(プログラムの大枠)
粒子法のプログラム第3回(データ構造)
粒子法のプログラム第4回(密度と圧力の計算)
粒子法のプログラム第5回(力の計算)
粒子法のプログラム第6回(境界条件と粒子位置の更新)
粒子法のプログラム最終回(粒子の出力)

その他の解説エントリ
SPHによる巻き波のシミュレーション1
SPHによる巻き波のシミュレーション2
SPHによる巻き波のシミュレーション3
このあとやりたいこと

固液連成シミュレーションに関するエントリ
粒子法による固液連成シミュレーション

流体シミュレーションに関するエントリ
【粒子法】粒子を流体としてレンダリング
3次元の粒子法シミュレーション
粒子法のシーンを2倍のサイズにしてみたが…
粒子法のシーンを2倍のサイズにしてみた
Haskell、OCamlでSPH法
カメラ位置を変えて流体をレンダリング
Bunny-shaped fluid simulation

剛体シミュレーションに関するエントリ
粒子ベース剛体シミュレーション(プレビュー)
粒子ベース多体衝突シミュレーション
引き続き、粒子ベース剛体シミュレーション
Falling Rigid Bunnies

動画
シミュレーションの結果をレンダリングして作った動画です。流体シミュレーションや剛体シミュレーションの動画を見ることができます。

動画の一覧


--

2009年5月19日火曜日

【粒子法】粒子を流体としてレンダリング


粒子法では流体を粒子として表現します。

そのため、そのまま描画すると、この投稿のように球のあつまりとして描画することになります。

これを、流体として見えるようにレンダリングしてみました。

マーチングキューブで陰曲面をポリゴン化し、レイトレーシングでレンダリングしています。

フォトンマップも使っているのでコースティクスも表現されています。

屈折率を高めにしたのでキラキラ。




■固液連成シミュレーションに関するエントリ
粒子法による固液連成シミュレーション

■関連する記事
粒子法のプログラム第1回(概要)
粒子法のプログラム第2回(プログラムの大枠)
粒子法のプログラム第3回(データ構造)
粒子法のプログラム第4回(密度と圧力の計算)
粒子法のプログラム第5回(力の計算)
粒子法のプログラム第6回(境界条件と粒子位置の更新)
粒子法のプログラム最終回(粒子の出力)
【粒子法】粒子を流体としてレンダリング
3次元の粒子法シミュレーション
粒子法のシーンを2倍のサイズにしてみたが…
粒子法のシーンを2倍のサイズにしてみた

粒子法(SPH)のプログラム
粒子法(SPH)のプログラムを解説したシリーズです。ソースコードも公開しています。

粒子法(SPH)のプログラム一覧



動画
シミュレーションの結果をレンダリングして作った動画です。流体シミュレーションや剛体シミュレーションの動画を見ることができます。

動画の一覧


--

2009年4月19日日曜日

粒子法のプログラム第3回(データ構造)


今回は、粒子法のプログラムのデータ構造を説明します。

使用したデータ構造は、Particle構造体とParticlesベクタの2つです。

Particles構造体は以下です。
typedef boost::numeric::ublas::vector<double> vec;
typedef struct
{
vec    r;
vec    v;
double rho;
double p;
vec    f;
} Particle;
boostライブラリのublasを使い、3次元ベクトルを表現しています。
rは粒子座標、vは粒子速度、rhoは粒子地点での密度、pは粒子地点での圧力、fは粒子が受ける力です。

Particlesベクタは以下です。
typedef std::vector<particle> Particles;
STLのvectorコンテナでParticle構造体のベクタを表現しています。

使用しているデータ構造は、この2つのみです。このように、粒子法はデータ構造が非常に簡単なのが特徴です。

次回からは、粒子法のアルゴリズムの説明になります。


粒子法のプログラム
粒子法のプログラム第1回(概要)
粒子法のプログラム第2回(プログラムの大枠)
粒子法のプログラム第3回(データ構造)
粒子法のプログラム第4回(密度と圧力の計算)
粒子法のプログラム第5回(力の計算)
粒子法のプログラム第6回(境界条件と粒子位置の更新)
粒子法のプログラム最終回(粒子の出力)

その他の解説エントリ
SPHによる巻き波のシミュレーション1
SPHによる巻き波のシミュレーション2
SPHによる巻き波のシミュレーション3
このあとやりたいこと

固液連成シミュレーションに関するエントリ
粒子法による固液連成シミュレーション

流体シミュレーションに関するエントリ
【粒子法】粒子を流体としてレンダリング
3次元の粒子法シミュレーション
粒子法のシーンを2倍のサイズにしてみたが…
粒子法のシーンを2倍のサイズにしてみた
Haskell、OCamlでSPH法
カメラ位置を変えて流体をレンダリング
Bunny-shaped fluid simulation

剛体シミュレーションに関するエントリ
粒子ベース剛体シミュレーション(プレビュー)
粒子ベース多体衝突シミュレーション
引き続き、粒子ベース剛体シミュレーション
Falling Rigid Bunnies

動画
シミュレーションの結果をレンダリングして作った動画です。流体シミュレーションや剛体シミュレーションの動画を見ることができます。

動画の一覧


--

2009年3月29日日曜日

さくらの根元に・・・


今日は日本橋にいってきました。

通りの両側にさくらが並んでいて、3分咲きくらいになっていたのですが、その根元に、今の時期絶対ないはずのものが。

なんと、雪があったんです。

もちろん降った雪が積もっていたわけではなく、たぶん、桜の開花を遅らせるためなんだろうなと思います。

聞くこと


最近、「聞く」ことに注意している。

これまでも、もちろん人の話を聞いて相手が何を言おうとしているのか推測して返すようにはしていたのだけれど、どうも上手くいっていなかった。

なんで上手くいかないんだろうと思っていると、その原因は推測がずれていることだということに気づいた。

それ以来、人の話を聞くときには、自分の推測があっているか、「それってこういうこと?」と確認するようにしている。

そうすると、びっくりするくらい会話がスムーズになった!
すばらしい。

リボンが流行り


今日、新宿に行ったのでついでにルミネを見てきた。

ルミネでお店を見てみると、リボン付きの服をよくみかけた。

つい最近日経MJでリボンが流行っているよという読んだことがあったので、「確かに流行ってる!」と納得。

2009年3月28日土曜日

フィール・ザ・カライ・センセーション!


シンガポールのマクドナルドのテレビCM。
http://www.mcdonalds.com.sg/tvcs/wasabi_tvc.mov

台詞が日本語なんだけど、そのあとのメッセージがまるっきりカタカナ英語で、めっちゃウケる。ワサビ=日本=カタカナ英語。ちょっと!バカにされてるよ!

あと「カライ・センセーション」というのも謎だけど、確かに、ワサビの辛さって、hotでもspicyとも違って、"karai"んだなぁと。

2009年3月17日火曜日

チンチョウゲ


オフィスの前にチンチョウゲの花が咲いています。
チンチョウゲが子供のころから好きです。

子供のころ住んでいたマンションの下に植わっており、2月3月になるとあの特徴的な香りといっしょに咲いて、

けど、1年に1度しか咲かないので、
「ちんちょうげ」という名前がなかなか覚えられず、

何か不思議なにおい、として記憶に残っています。

2009年3月15日日曜日

はるみ


はるみというみかんが売ってたので、食べてみた。

薄皮をむかなくても食べられて、ふつうのみかんより大きいから食べごたえもあって、ちゃんと甘いので、すごくおいしい!

2009年3月9日月曜日

3月8日 東京都美術館〜上野公園〜大崎



昨日は昼から東京都美術館へ行って、上野公園を散歩したあと、大崎のスタバで新卒採用のブログを書いた。

東京都美術館では、「アート&クラフツ」展をみた。展示のテーマは、19席後半にイギリスで起こった「アーツ&クラフツ」というデザイン運動。ウィリアム・モリスが主導した「アーツ&クラフツ」というのは、手仕事の良さを見直し、自然や伝統から美を再発見し、シンプルなライフスタイルを提案する、という運動で、その背景には、産業革命以降の工業化によって粗悪な大量生産品が増えたことがあったそう。

東京都美術館から出たあと、上野公園を散歩した。あいにくの曇り空だったが、ふと見上げると、さくらが咲いていて、鳥が花の周りを飛び回っていた。そうか、3月か、と思った。空のくもり色と、逆光の枝の黒、鳥の影、そのなかに、咲き始めのさくらのほのかなピンク色が印象的で、ノートにそれを描いた。

そのあとは、大崎へいって、新卒採用のブログを書いた。就活中の学生に、うちの会社へ興味を持ってもらうためのブログ。ターゲットとシナリオを考えた結果、どんな人間がこの会社にいるのかを知ってもらうのがベストだと考え、徹底的に自分のこれまで歩んできた道を話すことにした。ちょっとした自叙伝?

充実した1日だった。感謝!

2009年3月6日金曜日

白いたいやき


白いたいやきが流行っているらしい。

白い理由は、タピオカでんぷんを使っているから。

大福みたいなもちもちな食感だって。

そういえば、白いイチゴというのも、こないだみたなー。

白いイチゴは、突然変異でたまたまできたのを、たくさん作れるようにしたんだって。

赤いイチゴとならべて、紅白で売ってたりするのがいい感じ。

2009年2月28日土曜日

粒子法のプログラム第2回(プログラムの大枠)


プログラムの大枠が上の図です。

まず初期化をします。

そのあと密度と圧力を計算し、力を計算し、粒子の位置を更新します。

粒子の位置を更新したら、そのステップでの結果をファイルに出力し、また密度と圧力の計算へ戻ります。

これを、指定ステップ数だけ繰り返します。


粒子法のプログラム
粒子法のプログラム第1回(概要)
粒子法のプログラム第2回(プログラムの大枠)
粒子法のプログラム第3回(データ構造)
粒子法のプログラム第4回(密度と圧力の計算)
粒子法のプログラム第5回(力の計算)
粒子法のプログラム第6回(境界条件と粒子位置の更新)
粒子法のプログラム最終回(粒子の出力)

その他の解説エントリ
SPHによる巻き波のシミュレーション1
SPHによる巻き波のシミュレーション2
SPHによる巻き波のシミュレーション3
このあとやりたいこと

固液連成シミュレーションに関するエントリ
粒子法による固液連成シミュレーション

流体シミュレーションに関するエントリ
【粒子法】粒子を流体としてレンダリング
3次元の粒子法シミュレーション
粒子法のシーンを2倍のサイズにしてみたが…
粒子法のシーンを2倍のサイズにしてみた
Haskell、OCamlでSPH法
カメラ位置を変えて流体をレンダリング
Bunny-shaped fluid simulation

剛体シミュレーションに関するエントリ
粒子ベース剛体シミュレーション(プレビュー)
粒子ベース多体衝突シミュレーション
引き続き、粒子ベース剛体シミュレーション
Falling Rigid Bunnies

動画
シミュレーションの結果をレンダリングして作った動画です。流体シミュレーションや剛体シミュレーションの動画を見ることができます。

動画の一覧


--

2009年2月23日月曜日

粒子法のプログラム第1回(概要)


粒子法のプログラムを実装しようとしたのですが、論文や本だと数式レベルでしか説明がなく、それをプログラムにして動くようにするまで苦労しました。

数式をプログラムに落とすこと自体は簡単なのですが、各定数の値が分からなかったりして、粒子が上手く動いてくれるまで大変でした。

なので、同じところでつまづく人も多いのではと思い、自分が書いた粒子法のプログラムを紹介しようと思います。下の動画を作ったときのプログラムです。SPH法です。



こちらがソースコードです。

※2009.11.4追記 こちらに整理したC++版のほか、Haskell版、OCaml版のコードがあります。

まずはシンプルにと考え、近傍粒子の探索は工夫せず、n(O^2)ですがわかりやすいアルゴリズムを採用しています。まず動くコードを書き、そこから高速化していくアプローチです。

また、計算量を減らした方が試しやすいのと、粒子法は3次元への拡張が簡単なことから、まずは2次元で実装しています。

プログラムの中身を別の記事で少しずつ説明していこうと思います。

粒子法のプログラム
粒子法のプログラム第1回(概要)
粒子法のプログラム第2回(プログラムの大枠)
粒子法のプログラム第3回(データ構造)
粒子法のプログラム第4回(密度と圧力の計算)
粒子法のプログラム第5回(力の計算)
粒子法のプログラム第6回(境界条件と粒子位置の更新)
粒子法のプログラム最終回(粒子の出力)

その他の解説エントリ
SPHによる巻き波のシミュレーション1
SPHによる巻き波のシミュレーション2
SPHによる巻き波のシミュレーション3
このあとやりたいこと

固液連成シミュレーションに関するエントリ
粒子法による固液連成シミュレーション

流体シミュレーションに関するエントリ
【粒子法】粒子を流体としてレンダリング
3次元の粒子法シミュレーション
粒子法のシーンを2倍のサイズにしてみたが…
粒子法のシーンを2倍のサイズにしてみた
Haskell、OCamlでSPH法
カメラ位置を変えて流体をレンダリング
Bunny-shaped fluid simulation

剛体シミュレーションに関するエントリ
粒子ベース剛体シミュレーション(プレビュー)
粒子ベース多体衝突シミュレーション
引き続き、粒子ベース剛体シミュレーション
Falling Rigid Bunnies

動画
シミュレーションの結果をレンダリングして作った動画です。流体シミュレーションや剛体シミュレーションの動画を見ることができます。

動画の一覧


--

2009年2月18日水曜日

AdWordsの検索クエリレポート

リスティングキーワードのプラニングを行うときには、部分一致で入札したキーワードが実際にどのようなキーワードで検索されているのかを調べると役に立ちます。

AdWordsで実際にどのようなキーワードで検索されているのかというレポートが出せるのかどうか調べてみると、出せることがわかりました。
レポートセンター >
新しいレポート >
レポートタイプを「検索クエリの掲載結果」
とすれば、検索クエリのレポートが出力されます。

■検索クエリレポートの活用方法
検索クエリレポートには、以下のような活用方法があります。
  • 入札キーワードが効果的にユーザーの検索クエリや潜在顧客をとらえているか確認可能
  • どの検索クエリが効果的なのかを把握し、入札キーワードとして登録されているかを確認可能
  • 入札キーワードに適したマッチタイプを選択するのに利用可能
  • 新規登録が必要なキーワードがないか、もしくは削除したり除外キーワード登録が必要なものがないか確認可能

■検索クエリレポートの注意点
検索クエリレポートをみる際には、以下のような点に注意しよう。

  • 広告のクリックにつながったクエリのみが表示される(インプレッションのみのクエリは表示されない)
  • 検索ネットワークのデータのみが含まれる(モバイル検索のデータは含まれない)
  • 確認可能なデータは2007年5月2日以降のもの
  • 検索クエリに対応する入札キーワードは表示されない
  • 検索回数の少ないものや、個人情報に関わる場合、[検索クエリ キーワードマッチ]には「X個の固有なクエリ」と表示され、Xは実際に含まれているユニーククエリ数に置き換えられる

2008年11月30日日曜日

ElasticFoxが使えない…

Amazon EC2がなぜか使えない。ElasticFox経由で使おうとしているんだけど、
EC2 responded with an error for DescribeInstances
AuthFailure: AWS was not able to validate the provided access credentials
と言われる。

Access KeyもSecret Access Keyもちゃんといれているつもりなんだが…

2008年11月29日土曜日

ログデータから、特定項目についてユニークなものを調べる

スペース区切りのログデータの3〜5項目めについて、
ユニークなものを調べる。
check unique rows on 3 - 5 columns of space-separated log data.
awk '{ print $3, $4, $5; }' file | sort -u
awk便利だ。
awk is very useful!

2008年6月18日水曜日

【Hadoop】JAVA_HOMEの設定


Hadoopを動かすには、conf/hadoop-env.shの中にJAVA_HOMEという値を設定する必要があります。JAVA_HOMEには、Javaをインストールしたディレクトリのパスを指定します。以下に、一般的なJavaホームディレクトリのパスを記載します。
※1.5.0の部分は、使用するJavaのバージョンによって変えてください。

Windowsでの例

C:\jdk1.5.0

MacOSXでの例

/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/

Linuxでの例

/usr/java/j2sdk1.5.0


2008年6月16日月曜日

コロー展とスナップスケッチ


西洋美術館のコロー展に行ってきた。

美術館で絵を見るとき、いつもなら他の人と同じように1つ1つ絵を見ていくのだが、今日はちょっと違ったことにチャレンジしてみた。

絵を見ながらその場でメモ帳にエンピツでスナップスケッチを描いてみたのである。

実際に自分でスケッチしてみると、驚いた。

ただ見るだけでは気づかなかったものが次々と見えてきたり、その絵をあとからでもはっきりと頭に思い描くことが出来るのである。

模写して画家の描いたものをなぞることによって、はじめてその絵を見たことになるのかもしれない。

2008年6月5日木曜日

グーグルとアマゾンのクラウドの違い


@ITより

GAEはWebアプリケーション作成に特化したプラットフォームを提供
AWSはより汎用的なコンピューティングプラットフォームを提供

GAEで利用できる開発言語は今のところPythonだけ。
SDKには、Djangoが含まれている。
その他、グーグルが提供するAPI群も利用できる
- Datastore API
- Images API
- Mail API
- Memcache API
- URL Fetch API
- Users API
GAE上で稼働するWebサービスはグーグルのインフラ上で大規模利用
に耐えるほどスケールする、というのがグーグルの売り文句。

一方、Amazon EC2はよりPCに近い仮想環境を提供する。
開発言語どころか、どのOSを使うかも自由。

AWSにはAmazon EC2のほかにも、仮想ストレージ(Amazon S3)、
仮想データベース(SimpleDB、AmazonSQS)などがある。

AWSに出来てGWSに出来ないのは、次のような利用方法。
つまり、Hadoopを使った分散処理。
例として挙っているのは、ニューヨークタイムズの担当者が
過去の記事をデジタルアーカイブとして公開するために合計
4TBにもなるTIFF画像をPDF化するためにHadoopを使ったという例。
Amazon EC2に100インスタンスを生成。24時間以下で1100万枚の
画像から1.5TB分のPDFを作ることに成功したという。