Home Diary 倉庫

2003年12月17日

2003年12月17日

D

あるファイルAで、public importして気づかないうちに別の二つのファイルから同じmoduleをimportしていてなおかつAでそのmoduleをimportしていないと、import conflict with...って出る。はまった D3DXライブラリはデバッグ版ではd3dx9d.dllを動的にLoadするんだが、Release版libではどうやら静的リンクするようになってるらしい。Dのlibに変換できるかしらんからとりあえずd3dx9d.dll一緒に配布したら動くっぽい。 kiyo曰く、「キミ、センスない。つーか、はげしく見にくい」 Shinichi曰く、「とんがりコーンみたい」 akigen曰く、「そんなことやってるまえに セ ン タ ー 物 理 や れ」(←このまえ100点だったひと) hosoya曰く、「むしろ セ ン タ ー 国語 や れ」(←ベネッセ全国3位) switchにdefaultないとエラーになるのは気が付かないとはまる C++ののりでコンストラクタでclassメンバをnewし忘れてはまる ->とかいてはまる module hogehoge;書き忘れてはまる

おれってべんきょーねっしそ

まぁなんか作ってみよってことで、2001年東北大学後期物理の問題の、逆円錐型の容器に球を投げ入れたらどのような運動をするかって話があって、エネルギー保存則やら面積速度一定の法則やらで玉がどの高さまでいくのか計算したりするんだが、それをシミュレート(?)してみた。 緻密な計算結果によると玉と円錐軸をとおる平面を固定した慣性系でみて下の頂点を0、円錐面にそってx軸をとると、はじめの高さH、初速度v0(面にそって水平方向)、円錐の母角thetaとすると運動方程式と面積速度一定の法則から

a = cos(theta)*(H*v0)^2 / x^3 - g*cos(theta)

とかになる。(間違ってたらすまそ) これって一般解どなるんだろなぁ。

class CBall {
	real theta_;
	real v_0_;
	real h_0_;

	real omega_;
	real phi_;
	real a_,v_,x_,r_;

	real k_;
	const real g = 9.8;

	this(real thet){
		theta_ = thet;

		h_0_ = 30.0;
		v_0_ = sqrt(g*h_0_/3.0);
		
		k_ = cos(theta_)*h_0_*h_0_*g*h_0_/3.0;
	
		phi_=omega_ = 0;
		a_=v_=0;

		x_ = h_0_/cos(theta_);;
		r_ = x_*sin(theta_);

	}

        void calc(real time){
                real t = 1.0/x_;

                a_ = t*t*t*k_ - g*cos(theta_);
                v_ += a_*time;
                x_ += v_*time;
                r_ = x_*sin(theta_);

                t = 1.0/x_;
                omega_ = t*h_0_*v_0_;
        }

        Vector3 get(real time){
                Vector3 result;

                phi_ += time*omega_;

                calc(time);
                result.y = x_*cos(theta_);
                result.x = r_*sin(phi_);
                result.z = r_*cos(phi_);

                return result;
        }
...
}

回転しながら上下にいったりきたりする。軸はy軸が上。炎は尾っぽで軌跡がちょっくらみえる。Ballは飛行機だけど処理がへちょいから進行方向は向いていない…