改め Objective Technician

はぐれ技術者のやりたい放題

ソース中盤

2007-10-31 16:23:41 | プログラミング
class Parameters{

	static public float display_scale = 0.01f;
	static public int exe_speed = 2;

	static public float size_x = 0.0f;  //DPFサイズ[μm]
	static public float size_y = 0.0f;
	static public float size_z = 0.0f;

	static public float border = 80.0f;  //DPFのx, z方向切り出し長さ[μm]

	static public float xbox_size; //計算ブロックサイズ[μm]
	static public float ybox_size;
	static public float zbox_size;

	static public float cluc_scale;//ブロック分割スケール(小さいほど細かく分割)

	static public int xbox_num;  //計算ブロック数
	static public int ybox_num;
	static public int zbox_num;

	static public String dpf_filename = "SiC_IVE_ascii.stl";

	static public int dpf_poly_num;//DPFポリゴン数

	static public float pm_radius = 3.0f;//発生PM平均半径[μm]
	static public float pm_radius_sigma = 0.1f;//発生PM半径標準偏差[μm]

	static public float pm_generate_num = 2.0f;//PM粒子発生速度[個/s]
	static public float pm_flow = 1.0f;//PM流れ速度[μm/s]
	static public float pm_diffuse = 1.0f;//PM拡散速度[μm/s]
	static public float pm_burn = 0.1f;//DPFと接触したときに燃焼して減少するPMの半径[μm/s]

	static public float step = 1.0f;//計算時間間隔[step/s]

	static public int s_pm_generate_num;//PM粒子発生速度[個/step]
	static public float s_pm_flow;//PM流れ速度[μm/step]
	static public float s_pm_diffuse;//PM拡散速度[μm/steo]
	static public float s_pm_burn;//DPFと接触したときに燃焼して減少するPMの半径[μm/step]

	static public float depth_shift;//シミュレーション気相空間(yシフト)[μm]
	static public float bottom;//シミュレーション下層空間(y座標)[μm]

	static public float current_time;//シミュレーション時間[s]
	static public int current_step;//シミュレーションステップ[step]

	static public float end_time = Float.POSITIVE_INFINITY;//シミュレーション終了時間[s]
	static public int end_step;//シミュレーション終了ステップ[step]

	static public int pm_num;

	static int[] get_index(Point3f position){
		int vertex[] = new int[3];

		vertex[0] = (int)(position.x/Parameters.xbox_size);
		vertex[1] = (int)(position.y/Parameters.ybox_size);
		vertex[2] = (int)(position.z/Parameters.zbox_size);

		return vertex;
	}

	static void pm_init(boolean first){

		if(first){
			Date currentDate = new Date();
			Pm.generator = new Random(currentDate.getTime());
			Parameters.pm_num = 0;
			Parameters.current_time = 0.0f;
			Parameters.current_step = 0;
			Parameters.exe_speed = 2;
			PMSimulator.first = false;

		}

		Parameters.s_pm_burn = Parameters.pm_burn/Parameters.step;
		Parameters.s_pm_flow = Parameters.pm_flow/Parameters.step;
		Parameters.s_pm_diffuse = Parameters.pm_diffuse/Parameters.step;
		Parameters.s_pm_generate_num = (int)(Parameters.pm_generate_num/Parameters.step);

		Parameters.end_step = Math.round(Parameters.end_time/Parameters.step);


	}


	static void setbox_num(Vector<Point3f> dpf){

		float min_size = Math.min(Parameters.size_x, Math.min(Parameters.size_y, Parameters.size_z));
		Parameters.cluc_scale = 2.0f*(Parameters.pm_radius + Parameters.pm_radius_sigma);

		//計算ブロック数設定(ブロックは立方体)
		Parameters.xbox_num = Math.round(Parameters.size_x/Parameters.cluc_scale);
		Parameters.ybox_num = Math.round(Parameters.size_y/Parameters.cluc_scale);
		Parameters.zbox_num = Math.round(Parameters.size_z/Parameters.cluc_scale);

		//計算ブロックサイズ設定
		Parameters.xbox_size = Parameters.size_x/(float)Parameters.xbox_num;
		Parameters.ybox_size = Parameters.size_y/(float)Parameters.ybox_num;
		Parameters.zbox_size = Parameters.size_z/(float)Parameters.zbox_num;

		Parameters.dpf_poly_num = dpf.size()/3;


	}
}

class Coordinate{


	static MyTransformGroup coordinate = null;



	static void set_coordinate(Material mat){

		MyCylinder cx = new MyCylinder(1.0f, 120.0f, mat, null);
		cx.mulRotation(new AxisAngle4f(0.0f, 0.0f, 1.0f, (float)Math.PI/2.0f));
		cx.mulTranslation(new Vector3f(60.0f, 0.0f, 0.0f));
		coordinate.addChild(cx);

		MyCylinder cy = new MyCylinder(1.0f, 120.0f, mat, null);
		cy.mulTranslation(new Vector3f(0.0f, 60.0f, 0.0f));
		coordinate.addChild(cy);
		MyCylinder cz = new MyCylinder(1.0f, 120.0f, mat, null);

		cz.mulRotation(new AxisAngle4f(1.0f, 0.0f, 0.0f, (float)Math.PI/2.0f));
		cz.mulTranslation(new Vector3f(0.0f, 0.0f, 60.0f));
		coordinate.addChild(cz);
		MySphere org = new MySphere(3.0f, mat, null);

		coordinate.addChild(org);
	}


	static void set_label(Material mat){

		MyCylinder cxl = new MyCylinder(3.0f, 1.0f, mat, null);
		cxl.mulRotation(new AxisAngle4f(0.0f, 0.0f, 1.0f, (float)Math.PI/2.0f));
		cxl.mulTranslation(new Vector3f(100.0f, 0.0f, 0.0f));
		coordinate.addChild(cxl);

		MyCylinder cyl = new MyCylinder(3.0f, 1.0f, mat, null);
		cyl.mulTranslation(new Vector3f(0.0f, 100.0f, 0.0f));
		coordinate.addChild(cyl);

		MyCylinder czl = new MyCylinder(3.0f, 1.0f, mat, null);
		czl.mulRotation(new AxisAngle4f(1.0f, 0.0f, 0.0f, (float)Math.PI/2.0f));
		czl.mulTranslation(new Vector3f(0.0f, 0.0f, 100.0f));
		coordinate.addChild(czl);

	}


	static void set_vector(Material mat){

		MyCone vx = new MyCone(3.0f, 3.0f, mat, null);
		vx.mulRotation(new AxisAngle4f(0.0f, 0.0f, 1.0f, -(float)Math.PI/2.0f));
		vx.mulTranslation(new Vector3f(120.0f, 0.0f, 0.0f));
		coordinate.addChild(vx);

		MyCone vy = new MyCone(3.0f, 3.0f, mat, null);
		vy.mulTranslation(new Vector3f(0.0f, 120.0f, 0.0f));
		coordinate.addChild(vy);

		MyCone vz = new MyCone(3.0f, 3.0f, mat, null);
		vz.mulRotation(new AxisAngle4f(1.0f, 0.0f, 0.0f, (float)Math.PI/2.0f));
		vz.mulTranslation(new Vector3f(0.0f, 0.0f, 120.0f));
		coordinate.addChild(vz);

	}

	static void set_font(Material mat, Font font){

		MyText3D fx = new MyText3D("x[μm]", font, mat, null, MyText3D.ALIGN_CENTER);
		fx.mulScale(new Vector3f(10.0f, 10.0f, 10.0f));
		fx.mulTranslation(new Vector3f(140.0f, 0.0f, 0.0f));

		MyText3D fy = new MyText3D("y[μm]", font, mat, null, MyText3D.ALIGN_CENTER);
		fy.mulScale(new Vector3f(10.0f, 10.0f, 10.0f));
		fy.mulTranslation(new Vector3f(0.0f, 140.0f, 0.0f));

		MyText3D fz = new MyText3D("z[μm]", font, mat, null, MyText3D.ALIGN_CENTER);
		fz.mulScale(new Vector3f(10.0f, 10.0f, 10.0f));
		fz.mulTranslation(new Vector3f(0.0f, 0.0f, 140.0f));


		MyTransformGroup bx = new MyTransformGroup();
		bx.addChild(fx);
		MyTransformGroup targetx = new MyTransformGroup();
		targetx.addChild(bx);
		Point3f axisx = new Point3f(140.0f, 0.0f, 0.0f);
		new MyBillboard(targetx, axisx);
		coordinate.addChild(targetx);

		MyTransformGroup by = new MyTransformGroup();
		by.addChild(fy);
		MyTransformGroup targety = new MyTransformGroup();
		targety.addChild(by);
		Point3f axisy = new Point3f(0.0f, 140.0f, 0.0f);
		new MyBillboard(targety, axisy);		
		coordinate.addChild(targety);

		MyTransformGroup bz = new MyTransformGroup();
		bz.addChild(fz);
		MyTransformGroup targetz = new MyTransformGroup();
		targetz.addChild(bz);
		Point3f axisz = new Point3f(0.0f, 0.0f, 140.0f);
		new MyBillboard(targetz, axisz);		
		coordinate.addChild(targetz);

	}

	static void set_mark(Material mat, Font font){

		MyText3D fxl = new MyText3D("100", font, mat, null, MyText3D.ALIGN_CENTER);
		fxl.mulScale(new Vector3f(5.0f, 5.0f, 5.0f));
		fxl.mulTranslation(new Vector3f(100.0f, 5.0f, 5.0f));
		MyText3D fyl = new MyText3D("100", font, mat, null, MyText3D.ALIGN_CENTER);
		fyl.mulScale(new Vector3f(5.0f, 5.0f, 5.0f));
		fyl.mulTranslation(new Vector3f(5.0f, 100.0f, 5.0f));
		MyText3D fzl = new MyText3D("100", font, mat, null, MyText3D.ALIGN_CENTER);
		fzl.mulScale(new Vector3f(5.0f, 5.0f, 5.0f));
		fzl.mulTranslation(new Vector3f(5.0f, 5.0f, 100.0f));

		MyTransformGroup bxl = new MyTransformGroup();
		bxl.addChild(fxl);
		MyTransformGroup targetxl = new MyTransformGroup();
		targetxl.addChild(bxl);
		Point3f axisxl = new Point3f(100.0f, 0.0f, 0.0f);
		new MyBillboard(targetxl, axisxl);
		coordinate.addChild(targetxl);

		MyTransformGroup byl = new MyTransformGroup();
		byl.addChild(fyl);
		MyTransformGroup targetyl = new MyTransformGroup();
		targetyl.addChild(byl);
		Point3f axisyl = new Point3f(0.0f, 100.0f, 0.0f);
		new MyBillboard(targetyl, axisyl);		
		coordinate.addChild(targetyl);

		MyTransformGroup bzl = new MyTransformGroup();
		bzl.addChild(fzl);
		MyTransformGroup targetzl = new MyTransformGroup();
		targetzl.addChild(bzl);
		Point3f axiszl = new Point3f(0.0f, 0.0f, 100.0f);
		new MyBillboard(targetzl, axiszl);		
		coordinate.addChild(targetzl);

	}

	Coordinate(){

		coordinate = new MyTransformGroup();
		Material mat = new Material();
		mat.setDiffuseColor(new Color3f(1.0f, 1.0f, 1.0f));
		Font font = new Font("SansSerif", Font.BOLD, 1);

		Coordinate.set_coordinate(mat);
		Coordinate.set_label(mat);
		Coordinate.set_vector(mat);
		Coordinate.set_font(mat, font);
		Coordinate.set_mark(mat, font);
	}

}


ソース前半

2007-10-30 16:20:54 | プログラミング
//**********************************************************************
//PMSimulator                         *
//**********************************************************************
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.applet.*; 
import java.applet.*;
import saiga.*;
import java.util.*;
import java.io.*;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;


class CulcBox{
	Vector<Dpf> dpf = null;
	Vector<Pm> pm = null;
	int ix, iy, iz;

	public CulcBox(int i, int j, int k){
		this.pm = new Vector<Pm>(0);
		this.dpf = new Vector<Dpf>(0);

		this.ix = i;
		this.iy = j;
		this.iz = k;
	}


	boolean pm_comp(Pm pm){

		boolean did_move = true;

		for(int i = -1; i <2 & did_move; i++)
					pm.pos.sub(pm.vector);
					did_move = false;
				}
		}

		return did_move;

	}



	void move(){

		Enumeration e = this.pm.elements();
		while(e.hasMoreElements()){
			Pm tmp = (Pm)e.nextElement();

			tmp.set_vector();
			if(tmp.pm_boundary()) {

				if(this.can_burn(tmp)){
					tmp.radius -= Parameters.s_pm_burn;

					float scale = tmp.radius/(tmp.radius + Parameters.s_pm_burn);
					if(scale > 0.0f)
						tmp.sg.mulScale(new Vector3f(scale, scale, scale));

					if(tmp.radius <= 0.0f){
this.pm.removeElement(tmp); BranchGroup bg = (BranchGroup)tmp.tg.getParent(); bg.detach(); Parameters.pm_num --; } } else{ tmp.pos.add(tmp.vector); tmp.tg.mulTranslation(tmp.vector); if(this.pm_comp(tmp)) this.swap(tmp); } } } } static float distance(Pm pm, Dpf dpf){ return pm.pos.distance(dpf.vertex0) + pm.pos.distance(dpf.vertex1) + pm.pos.distance(dpf.vertex2); } void swap(Pm pm){ int cur_index[] = Parameters.get_index(pm.pos); if(cur_index[0] != this.ix | cur_index[1] != this.iy | cur_index[2] != this.iz){ PMSimulator.culcarray[cur_index[0]][cur_index[1]][cur_index[2]].pm.addElement(pm); this.pm.removeElement(pm); } } boolean can_burn(Pm pm){ boolean touch = false; for(int i = -1; i <2 & !touch; i++) CulcBox.distance(pm, tmp)) touch = true; } return touch; } } class Pm extends MySphere{ static MyTransformGroup pm_tg = null; static Random generator = null; MyTransformGroup tg = null; MyTransformGroup sg = null; float radius; Point3f pos = null; Vector3f vector = null; boolean destination = true; static void pm_init(){ Pm.pm_tg = new MyTransformGroup(); Pm.generator = new Random(); Pm.pm_tg.setCapability(Pm.pm_tg.ALLOW_CHILDREN_EXTEND); Pm.pm_tg.setCapability(Pm.pm_tg.ALLOW_CHILDREN_READ); Pm.pm_tg.setCapability(Pm.pm_tg.ALLOW_CHILDREN_WRITE); } public static void generate_pm(){ float r; Material mat = new Material(); mat.setDiffuseColor(new Color3f(1.0f, 0.0f, 0.0f)); for(int i = 0; i <Parameters.s_pm_generate_num; i++){ new Pm(r, mat); } } public Pm(float radius, Material mat){ super(radius, mat, null); this.tg = new MyTransformGroup(); this.sg = new MyTransformGroup(); this.tg.setCapability(MySphere.ALLOW_TRANSFORM_WRITE); this.tg.setCapability(MySphere.ALLOW_TRANSFORM_READ); this.sg.setCapability(MySphere.ALLOW_TRANSFORM_WRITE); this.sg.setCapability(MySphere.ALLOW_TRANSFORM_READ); int index[] = null; do{ this.radius = radius; this.pos = new Point3f((float)Math.random()*Parameters.size_x, 0.0f, (float)Math.random()*Parameters.size_z); index = Parameters.get_index(this.pos); } while(!(PMSimulator.culcarray[index[0]][index[1]][index[2]].pm_comp(this))); this.vector = new Vector3f(); PMSimulator.culcarray[index[0]][index[1]][index[2]].pm.addElement(this); Parameters.pm_num ++; this.sg.addChild(this); this.tg.addChild(this.sg); this.tg.mulTranslation(new Vector3f(this.pos)); BranchGroup newGroup = new BranchGroup(); newGroup.setCapability(MySphere.ALLOW_TRANSFORM_WRITE); newGroup.setCapability(MySphere.ALLOW_TRANSFORM_READ); newGroup.setCapability(BranchGroup.ALLOW_DETACH); newGroup.addChild(tg); Pm.pm_tg.addChild(newGroup); // 追加できる } boolean pm_boundary(){ boolean can_move = true; float destination_x = this.pos.x + this.vector.x; float destination_y = this.pos.y + this.vector.y; float destination_z = this.pos.z + this.vector.z; if(destination_x <= 0.0f | destination_y <= 0.0f | destination_z <= 0.0f | destination_x >= Parameters.size_x | destination_y >= Parameters.size_y | destination_z >= Parameters.size_z) can_move = false; return can_move; } void set_vector(){ double theta = Math.random()*2.0*Math.PI; double phi = Math.random()*2.0*Math.PI; double dx = Parameters.s_pm_diffuse*Math.sin(theta)*Math.cos(phi); double dy = Parameters.s_pm_diffuse*Math.sin(theta)*Math.sin(phi) + Parameters.s_pm_flow; double dz = Parameters.s_pm_diffuse*Math.cos(theta); this.vector.set((float)dx, (float)dy, (float)dz); } }


タレ意識

2007-10-29 19:32:11 | ムダ話
10月29日(Mon) 評定 晴 涼

ストレッチ
ドリル
ポールワーク
4歩
6歩
振り上げ

竹跳び
3m20、アップライト1m
握り3m10、6歩

鉄棒

c-down



タレ意識。


がむしゃらにがんばったからといってパフォーマンスが良くなるものではないのは言わずと知れた事実。

共縮を起こさないようにうまくリラックスする様を形容してタレ意識という。がんばって跳べるようになるなら誰だって跳べるようになってるはず。

埼玉のある高校の方言で、全力を出さないでテキトーに流すことを「タレる」ということがある。

棒高跳びでも、踏み切った後にちゃんと「タレ」ないですぐに振り上げるとポールが立たないわ体が上がらないわでうまく行かない。





いや、レポート書いてて「他励式」って書こうとしたら「タレ意識」と変換されて妄想してただけ。



R3乗り発見

2007-10-28 21:16:00 | 陸上競技
TOEICでした。

最近合練出られてない上に応援行かなくてホント申し訳ない。


TOEIC終わって川内キャンパス出たあたりで、ボクのと全く同じESCAPE R3のフォレストブラウンと遭遇した。しかも女の子。

ワイヤーロックを首にかけてた気がする。


先週は工学部図書館でコバルトブルーのR3を発見。





R3じゃなくてもGIANTは毎日のように見かける。流行ってるね。自転車。




てか、原付に乗り換えたら負けかなと思ってる。





それよりも、パソコン分解したりUNIXいじったりプログラミングばっかやってるようじゃ負けかなと思うようになってきた。最近。





本気で英語勉強して国立の研究所目指そうかな。つくばとか和光とか。視覚研究やってるとこ。

まずは通研のS入研で勉強してみようと思う。


まぁ、自分は気持ちがコロコロ変わるからアレだけど。



思い立ったときにすぐ始めれば勝ったも同然かなと思ってる。

足跡

2007-10-27 22:59:45 | 陸上競技
この前のポール練。

この前に限らずずっと前からだけど、突っ込む6歩ぐらい前からボックスに向かって助走路を右側に横切りながら走ってる。


左端を走って、そしてすごく右端で踏み切ってる。





ポール始めたばっかの頃は左に吹っ飛ぶことが多かったけど、今は真っ直ぐ立つ。右端で踏み切ることで左に傾くのが修正されてるはず。

でも、これ直して真っ直ぐ走って真っ直ぐ立つようになったらもっと硬いポール使えるだろうなぁ。




あ、そう。

山大の交通手段。レンタカーにポール積んで行くからあと3人ぐらい乗せられますよ。


Java3D

2007-10-26 23:55:44 | プログラミング
オブジェクト指向の本領発揮。

CGでシミュレーション結果とかのアニメーションを自由に作れたら研究発表などで説得力出るだろうなぁと思って、Java3Dに手を出しはじめた。

CやC++使ってOpenGLの細かい設定をいちいち全部書くなんてやってられない。なんでM本研究室はJava3Dに移行しようとしないんだ。でも勝手にバイトでJava使ったら怒られるだろうなぁ。

CG作る際にオブジェクト指向の考え方は必須。CG作るためにJavaができたんじゃないかとさえ思う。



あと、サーバ作ってみたくてDELLの中古マシンを通販で買った。OSなしの本体だけで27000円。

安いのにかなりハイスペック。




UNIXとネットワークの勉強を兼ねてこれで自宅Linuxサーバを構築して、同時にJava3D勉強して、昔に作ったルービックキューブプログラムのインターフェースをCGにしてwebアプリケーションとして公開する、ぐらいやればかなり使える知識が身に付くはず。

授業、部活、バイト、英語とのマルチタスクの状況で、今セメ中にできるか。



なんかワクワクするぜ。


うひゃぁ。


フィールドビデオライブラリ化計画

2007-10-22 00:39:10 | 陸上競技
前々から要望があったフィールドビデオの整理。

かかしのCD聴きながらTeXでレポート書きながら、ハンディカムから何時間もかけてデータをカリカリと取り込んでる。

評定に現存するDVDが、一番古いので2005年の春あたりので、ところどころ試合のビデオが抜けてて、過去の人の貴重なビデオやたまに短距離の練習なんかも入ってたりして、とりあえず全部取り込んでmpgファイルにして仕分けした。

ただ、全部合わせるとサイズがでかすぎて、どうしようか考え中。


近々UNIXの勉強とネットワークの勉強のために自宅サーバ作ってみるつもりだから、出来たらついでにそこにアップしようかと思う。

部内だけでも公開されるのイヤって方は言ってください。

とりあえずここに一時的にファイル置いときます。ただし今日から1週間後に消されるけど。

IDとパスワードは、明日あたりフィールドノートに書いときます。もしくはボクに聞いてください。

ロング・ヘアード・ボーイ

2007-10-21 20:37:45 | nack5
埼玉の FM nack5 の鬼玉という番組でパーソナリティーやってる人の写真集が出たらしいので、買ってみた。

マル決本の外伝という設定らしい。


というか、生まれて初めて写真集ってもんを買った。

写真集っていっても、半分は普段の鬼玉みたいにおバカな内容のネタ本みたいなもん。

ネタ的に、マル決本に劣らずけっこうなハイレベルだと思う。



すごいよ!!nack5!



ついでに、同じく鬼玉パーソナリティーがやってる「かかし」ってバンドのCDを3枚も買ってしまった。

万博(まんひろし)に入ってる「ロング・ヘアード・ボーイ」が好き。

わき毛が一本伸びて、片思いの女の子の家まで片道5時間の道を旅して、ついに彼女が住む「メソン・ド・フナムシ」まで伸びて辿り着いたものの、何しろわき毛だから呼び鈴が押せなくて何度も失敗し、やっと押せて彼女が出てきたけどわき毛だから話ができない。彼女の笑顔見たさに伸びてきたが…

というお話。


わき毛が伸びるラブソングという構想で4年間温めて書いたらしい。
ちなみに、書き上げた時間は7~8分だったらしい。



あと、「フランシーヌさん」から「無縁仏」へと曲が変わるところでの曲調のギャップがうけた。



竹跳び

2007-10-20 15:27:34 | 陸上競技
10月20日(Sat) 評定 晴

ストレッチ
ドリル
ポール歩き
ポール走り
突っ込み踏み切り確認
4歩構えなし
6歩突っ込み
ぶら下がり
振り上げ

竹跳び練習
14ft-150lbs
握り3m20
6歩、12m00
3m20ゴムバー
アップライト1m

c-down
折り込み


曲げないで低い高さを竹跳びで何本も。

アップライト1mにして幅を出して、いつもやってる振り上げみたいにちゃんとポールに乗っかってからターン。
右手を引かないで、左足を後ろに残す。右足を引き上げる。曲げないから左手が潰れるのはしょうがない。
突っ込みで左手が巻き手にならないように注意。
バーを越えるときは、ちゃんと体の正面が下向いてるように。左脇腹が下向かないように。

前と比べると、竹跳びがずいぶんとスムーズにできるようになった。
特に左足が意識しなくても残るようになった。右手を引いちゃうこともなくなった。ちょっと意識すれば巻き手にもならない。
したがって、曲げなくてもタメられてるから余裕ができる。

振り上げる方向をもうちょっと真上になるように意識すると、腰がもっとポールに乗って、ターンを急がなくてよくなる。そうすると、ちゃんと体の正面がバーに向く。



曲げないとこれだけ出来るのに、曲げると全部出来なくなる。

左手を突っ張りすぎて右肩が入らなくなって、振り上げにつなげられないのがすべての原因。

振り上げられないと、こんなかっこでバーを越えることになる。
(七大戦、3m60の1本目、成功)






さらに、ポールが立たないのにムリヤリ跳ぼうとするとこんな変態的なかっこになる。








元画像これね。





その他の風車ポーズ応用編。

やりなおし

2007-10-19 21:29:59 | ムダ話
A木研究室で研修発表を終えて、やることがなくなったから研究室から私物を撤収した。


研究室配属やり直し。

でも、ここでの経験は絶対にムダにはならない。

研修ではディジタルフィルタをハードウェアで設計して、回路シミュレーションするとこまでやった。


ディジタルフィルタってのは、音声とか画像とか動画とかの信号に対して何かしらの効果を加えて出力するもの。ノイズをカットしたり、特定の周波数成分だけ取り出したり、ぼかしを入れたり輪郭を強調したり、いろんなことができる。


例えば、阻止域で等リプルとなるようなローパスフィルタであるチェビシェフII型フィルタを用いると、より急激なカットオフ特性が実現できて、画像に用いると下図のような効果を得ることができる。


フィルタ処理前                                   処理後
     







また、双2次フィルタを直列に接続して振幅特性の高域に棚状の利得をかけるハイシェルフフィルタを用いた場合、このような効果を得ることができる。



処理前                                           処理後
           






※注:だいぶウソです。






本来の3年生の配属はすぐ来月。

研究室変えて通研のS入研にいくつもり。



なんか、ヒマになるどころかやることが増えてる。

結局授業いっぱい取ることにしたし、さらに実験レポートを毎週出すってのが重い。


「割のいいバイトない?」とか言ってる場合じゃねぇ。

UNIXの勉強もしたい。
GUIとかCGとかJava3Dとかの勉強もしたい。
デビッド・マーの本(ビジョン)もじっくり読みたい。

そんなことより英語…。