読者です 読者をやめる 読者になる 読者になる

乗車日記

自転車ときのこ

計算

粒子数1000個

昨日のプログラム、粒子数を100個から1000個にしてみた。2体力なので計算時間は100倍。でも太陽系っぽくなってきた。www.youtube.com

python勉強中

なんだか新しいプログラム言語をやってみたくなって、pythonを勉強中。 以前にjavascriptで書いた太陽系形成プログラムを書き直してみた。行列演算が出来るのでforループを書く必要が殆どない。むしろループを回さずにnativeの行列演算ルーチンを使うとMATLA…

寝坊

昨晩は確率微分方程式の伊藤積分とストラノビッチ積分の変換を考えていて、夜中の1時まで寝られなかった。今朝は寝坊して水曜ロードに参加できず。まあでも半分確信犯的なもの。やたらと寒くなるのは分かっていたので。 参加者の話では、完全冬装備でないと…

きのこ育成 ver2

上に何も載っていない細胞だけ分裂するようにしました。何となくそれっぽくなってきました。(パソコンのブラウザでご覧下さい) それから、画面をクリックして引っ張るとカメラの角度を変えられるようにしました。 ホイールでカメラの遠近も変えられます。 …

きのこ育成プログラム

前のものの色合いを変えてみた。細胞同士の結合ルールを色々試しているけれど、いまのところver7のパターンが一番綺麗に生える。あまりにこったルールを付けても駄目なようだ。

細胞の育成ver7

左の壁になる青の細胞と右の壁になる黄色の細胞の間には反発力が働くようにした。 下向きに伸び始めた細胞は早めに分裂をやめるようなルールにした。 今後やりたいこと: ある程度伸びたら、横に広がって笠のようなものを作るようにする。 円を球にして三次…

細胞の育成ver6

試行錯誤の後、幾つかルールを入れたら、明確に上に向かって伸びるようになった。 成長結果の一例 確実に上に向かって伸びるという意思を入れてやらないと、重力に逆らうことは難しいようだ。 枝分かれした後、またくっついてしまうので、今度は青と黄色を反…

細胞育成ver5

プログラムを見直して、細胞数が増えてもあまり速度が落ちないようにした。 分裂するときに、周りの細胞の位置を判断して出来るだけ上に成長するように分裂の方向を決めるようにした。これまでは完全にランダムだった。 これで明確に上に向かって伸びるよう…

細胞の育成ver4

横に広がってしまい、なかなか上に向かって伸びてくれないので、色々改造。 まず、自分の左か右に別の細胞があって、かつその反対側があいている場合、分裂を止めるようにした。(大きな構造の右の壁か、左の壁になってくれることを願って。) つぎに周りを…

少しきのこっぽくなった

重力を導入。 既に成長している細胞の上に別の細胞が乗った場合、乗られた細胞は成長・分裂が停止して赤くなるというルールを導入。(これがないと上向きに増殖してくれない。) まだまだ遠いが、キクラゲぐらいには近づいた気がする。

細胞育成続き

細胞育成の続き。途中である確率で分化して、成長も分裂もしないようになるという過程も入れてみた。何か構造ができないかと思って。しかしキノコの再現にはまだまだ遠い。 ところで、本日購入した日経サイエンスの今月号を読んでいたら、細胞シミュレータの…

細胞育成

記号論を読んでいて、プロトタイプとトークンの話が出てきた。JavaScriptの構造に似ている。それで、またJavaScriptのプログラミングをやりたくなった。取り組んだのは以前から構想していた細胞を育てて茸を作るプログラム。四苦八苦して、とりあえず細胞が…

球の体積

長女が球の体積の出し方を知りたいと言い出したので、プログラミングの練習がてらやって貰った。 円の面積は知っている。その理屈も。 ピタゴラスの定理は申し訳ないが天下り。 階段近似の概念は分かるようだ。 その前提でアルゴリズムを作って解説。 N個の…

MATLABとRCWA

行列計算に強い数値処理ソフトMATLABが使えるようになったので、行列を多用するRCWA(厳密波結合解析)による二次元周期構造体の光学特性を計算をするプログラムを書いてみた。他の仕事をしながら、MATLABの勉強をしながら半日ほどで書けてしまった。CやFORT…

プラズマエッチング(2)

マスクを導入してパターンを切れるようにした。中性粒子との衝突を入れて平均自由行程が反映されるようにした。中性粒子の温度は400K。水素原子を仮定。圧力は10Pa。 プラズマエッチング - YouTube

プラズマエッチング

エッチングが出来るようになった。電子の動きを見るためには大きな画面にしてみてください。 プラズマエッチング - YouTube

水素プラズマ録画

プラズマ密度10^11cm^-3。上下のプレートには電子(白)が付着するようにしてある。水素イオン(黄色)は電子の1000倍重くてのろいが、64倍速でビデオに落としたので動きが見える。まず激しく動き回っている電子が上下のプレートにくっつき、その電荷に引っ張ら…

プラズマ

イオン結晶のプログラムに外部電界を導入して、高周波プラズマを再現するというのを前からやってみたかった。それから、この機会に適当な計算機の都合上の単位系はやめて、ちゃんと質量、電荷、温度等を自然の単位系に設定し直した。水素プラズマにしてみた…

モンテカルロ法

結晶育成のシミュレーションにMetropolisのモンテカルロ法を導入して温度を一定に出来るようにした。粒子にランダムなスピードの変化を与え、その結果変化するエネルギーdEが負の時は、その変化を受け入れる。正の時は乱数を発生させ、exp(-dE/kT)の確率で変…

結晶の育成

宇宙のプログラムをちょっと変えて結晶を育成してみた。周囲を壁に変更し、粒子同士が近づきすぎると反発力が生じるようにして、エネルギーをだんだん下げている。力の形状は F=G*(1-100*exp(-R))/(R^2)*exp(-R)という形。ここでRは粒子間の距離。ちょっと無…

宇宙の大域構造の形成

以前に作った銀河の形成のプログラムでは不満な点が一つあった。宇宙は本来無限に続いて中心がないのに、このプログラムでは空間が限られているのでどうしても中心があり、そこが重力の中心になって物質が集まってくる。本来ならば、物質の初期配置の揺らぎ…

ソースコード

ソースコードが1000行を越えてきたので、念のためこちらにも保存。 enchant(); game_size=320; dt=1/10000.0; dt2=0.5*dt*dt; scale=32.0/1.0; //dots/meter Gravity=-9.8; num_frame=0; var EARTH = enchant.Class.create(Sprite,{ initialize:function(){ …

人間の物理モデルが完成

自転車が後ろ向きに走り出すのは腕と足の力のモーメントによってフレームにかかる力の反力を人間側に加えていないためだった。剛体において力と力のモーメントの両方を使って運動を記述する方法に慣れていないため、いろいろとバグが出る。しかし、一通りシ…

人間を構築中

意外に難しい。見た目はとりあえず出来たが、実際にはハンドルを握らせることも未だ出来ていない。現在のバージョンでは外から決め打ちで腕と足の角度を決めている。まずは自動的に手足を動かして、BBの鉛直線上に体の重心を持っていく機能をつけたい。 ゆっ…

サスペンションルーチン修正

外力がサスペンションにしかかからない前提で式を立てていたが、動かしてみると不自然な挙動が幾つか発見された。式を見直したところ、フレーム剛体にサスペンション以外から加わる外力とそのモーメントも考慮しなくてはいけないことがわかった。自己無動着…

ついにサスペンション導入に成功

とりあえずサスペンションを導入することができた。まだおかしいところも残っているかもしれないが、一応動くようになってくれて嬉しい。つぎは地形エディターを導入したい。

サスペンション導入準備

そろそろシミュレーターにサスペンションを導入しようと思い、本格的に計算をやって見た。意外に手ごわい。サスペンションはフレーム剛体と完全に一緒に回転する訳ではないので位置表示に絶対座標を用い、その他のフレーム上の点はフレームと一緒に回転する…

MTBシミュレータにホイール回転を導入

かなりの改良を進めた。ホイールの回転を取り入れ、転がり抵抗も考慮した計算になった。全体がスパゲッティーになってきたので、サスペンションを入れる前に整理し直す必要がある。

MTBシミュレーター

とりあえず、フルリジッドだけど動くようになったけど、同時にだいぶんコードが長くなってきた。 http://jsdo.it/tasanokona/s7Q2/(Chromeだとスムースに動きますが、それ以外のブラウザでは遅い、あるいは全く動かないかもしれません。) ここまでは完全剛…

剛体モデルへ移行中

フレームのオブジェクトにホイールとサスペンションのオブジェクトを従属させることにした。この調子で行くと、乗る人間もフレームに従属することになりそうだ。 今日はとりあえずフレームとホイールのデータ設定と描画の途中まで。フレームは全体としてスプ…

剛体モデルへ移行準備

やはりフレームが0.1%ほど伸び縮みして振動するときの様子を振動を1マイクロ秒単位で計算するのは馬鹿らしい。カーボンフレームの振動吸収性は再現できるかもしれないが、計算速度が落ちてリアルタイムで結果を表示できなくなってしまう。よって、フレーム全…

自転車シミュレーター計画再開

Enchant.jsでリアルタイム表示が可能になったので、自転車シミュレータ計画再開。 今度はフォークだけでなく、フレームも人間もシミュレートしてみたい。 剛体の計算はいろいろと矛盾が出てきそうなので、質点間を張力で結ぶモデルにしたい。剛体的なものも…

太陽系の形成 初期角運動量

初期角運動量を与えることで、だいぶん太陽系のような感じになってきた。 それから力のダンピングが完全に粒子間で対称になるように改良。これで超新星爆発はなくなった。動画は16倍速。 // forked from tasanokona's "太陽系の形成" http://jsdo.it/tasanok…

太陽系の形成-高速化-

昨晩、梅雨入りというニュースを聞く。今朝は雨が降るとみて起きず。実際どの程度降っていたかは不明。 夜、太陽系の形成プログラムを高速化。重力の計算を個々のスプライトのイベントではなく、coreのほうでまとめて行うことにした。 それから、クリックし…

銀河の形成

星のクラスを作ってみた。まわりのすべての星のから受ける重力を計算して、その合計で星が加速される。一つクラスを作ると後はいくつでも星を追加することができるので、他体型のシミュレーションが簡単にできる。星を1000個ばらまいてみたら銀河の形成と消…

質点を棒でつないで振り回す。

フレームやら人間やらの動きをシミュレーションする基本プログラムの出来を確かめるため、簡単なモデルで計算。 1kgの質点三つを4mの長さの棒を二本使って順番につなぐ。棒の重さはゼロ。真中の質点から生えている二本の棒を、5N/mのトルクで回す。求心力を…

プログラム

Macwiki様の3次元ベクトルクラスを使わせていただいています。 http://macwiki.sourceforge.jp/wiki/index.php/Vector3%E3%82%AF%E3%83%A9%E3%82%B9 using namespace std; #include<iostream> #include<math.h> #include<stdio.h> #include"vector3.h" #define PI 3.1415926535897932384</stdio.h></math.h></iostream>…

アニメ化

頑張ってアニメ化してみた。awkでgnuplot操作用スクリプトを吐き出すスクリプトを書いて、そのスクリプトでgnuplotに400枚絵を吐き出させて、それをimagemagicでつないでgifアニメにして、それからgiamでaviに変換。意外に大変だったが、awkやgnuplotの使い…

リバウンド/コンプレッション調整

Flare氏からコンプレッションに対してリバウンドのダンピングを強くするとよいとのコメントをいただいたので、プログラムを少し改造して、リバウンドとコンプレッションのダンピングを別々に設定できるようにした。それから、これまでの空気圧は絶対圧で表示…

でかい根っこor高速突入

シミュレーションなので、実際には試してみることが難しい状況を計算してみた。 半径10cmの根っこに20km/hで突っ込む 根っこ半径10cm(半分地面に埋まっている)が5本、時速20km、ばね上重量40kg、ばね下重量2kg、サスの圧力は66psi。 吹っ飛んでしまう。サ…

連続根っこ

半径4cmの根っこ(半分地面に埋まっている)を5本連続、時速20kmで突っ切るときのシミュレーション。空気圧は66psi。ダンピングは25kg重/(m/s)。 後半、浮いている時間が長くなっている。しかし、この計算ではだんだんサスペンションが伸びてくる。逆のイメ…

連続根っこ(低空気圧)

これが計算をしたいというのが、そもそもの動機。半径4cmの根っこ(半分地面に埋まっている)を5本連続、時速20kmで突っ切るときのシミュレーション。空気圧は36psi。ダンピングは25kg重/(m/s)。 最初の根っこで底付きして、吹っ飛ばされほとんどタイアが宙…

車輪による乗り越え

サスペンションの効果を計算する前に、まず物体をタイヤで乗り越える際にどのような上下運動が加わるのかを検討してみた。 図のように半径R1の根っこが半分地面に埋まっているとき、半径R2のタイヤで乗り越えることを考える。この場合ホイール中心の描く軌跡…

修正後のプログラム

#include<iostream> #include<math.h> #include<stdio.h> #define PI 3.141592653589793238463 #define G 9.80665 using namespace std; const double rigid=1000/1e-4; //0.1mmで100kg重 const double S=PI*1.5e-2*1.5e-2; //直径3cmのピストン const double L0=10e-2;//ストローク長10</stdio.h></math.h></iostream>…

時速20kmで半径2cmの根っこを超えるシミュレーション(26インチ)

とりあえずできた。プログラムも少し修正あり。まずは結果。空気圧は66psi、ダンピングは前回ぎりぎり振動がなかった50kg重/(m/s)とした。 根っこの頂点を超えた後、タイアが宙に浮き、地面との接触力がなくなってしまっていることが分かる。その時間は約0.0…

時速20kmで半径2cmの根っこを超えるシミュレーション(29インチ)

気になるのでタイア直径29インチでもやってみた。26インチと比べて有意な差はないようだ。

時速20kmで半径2cmの根っこを超えるシミュレーション(26インチ,ダンピング半分)

ダンピング定数を25kg重/(m/s)と、最初の値の半分にしてみた。おお!大分接地がよくなった。

フォークシミュレーションプログラム

とりあえずできた。 #include<iostream> #include<math.h> #include<stdio.h> #define PI 3.141592653589793238463 #define G 9.80665 using namespace std; const double rigid=1000/1e-4; //0.1mmで100kg重 const double S=PI*1.5e-2*1.5e-2; //直径3cmのピストン const double L0=10e</stdio.h></math.h></iostream>…

プログラムチェック用計算

フォークが伸びきった状態を初期状態とし、そこに乗車した後、体重でフォークが縮んで安定状態になるまでの計算の結果。 ダンピングが少ないとトランポリンのように振動してしまう。適切なダンピングを入れると0.5秒ほどで定常状態に落ち着く。ザック込70kg…

サスペンションの効果

サスペンションの空気を入れ直したら劇的に前輪が滑らなくなった。気になるので計算モデルをたててみた。 式を見た印象ではサグが十分とれる範囲でバネは硬い方が地面への追従が良いような気がする。バネ下質量は小さい程よい。ダンパーはコンプレッションが…