« 目標を持つと言うこと | Main | 符号付き演算と、符号無し演算 »

2004.04.09

Javaで画像処理

んと、Javaで画像処理の簡単な実験をしたいんですよ。例えば3角形の情報を、3つの頂点で持つか、3つの辺で持つのか、2つの辺と角度で持つのか、いろいろ変えたときに、アルゴリズムがどう変わるのか、そういうことを試してみたい。

その第一歩として、この前簡単にプログラム書きました。
一部ソース


//ポリゴンの描画
//P1の周りを一周
g.drawLine(P1.a.x * 20, 100 - P1.a.y * 20, P1.b.x * 20, 100 - P1.b.y * 20);
g.drawLine(P1.b.x * 20, 100 - P1.b.y * 20, P1.c.x * 20, 100 - P1.c.y * 20);
g.drawLine(P1.c.x * 20, 100 - P1.c.y * 20, P1.a.x * 20, 100 - P1.a.y * 20);

*20とか、100 - とかは、何しているかっていうと座標系の変換をしています。勉強中は座標が、(1,3)とか、小さい値で勉強します。実際に画面に出すときはJava appletは座標の指定がpixelなので、拡大しないと何しているかわからない。原点も、Javaは左上が原点だけど、勉強中は普通のx,y座標系を使う。その変換のために、描画直前で座標を変換しています。

そして、これをどう綺麗に書いて良いのかがわからずに悩んでいます。
毎回線引く度に、ソース上で変換させるってかっこわるいでしょ。ちょっとましな方法として、三角形オブジェクトに、勉強用座標系から、それに対応した表示用の座標系を返すメセッドを持たせること。P1が三角形オブジェクトとすると、P1.getViewX()のような感じですね。

でも、そういう変換って表示系が持つべき物ですよね。実際に表示するときに、どれだけ拡大するかっていう情報はシステムで一意なので、各オブジェクトに持たせる必要はない。もし、表示系が極座標だろうが、ゆがんだXY座標であろうが、各オブジェクトは勉強用座標系だけ持てばいいと思うんですよ。表示系が複数あることを考えると、表示系の数だけオブジェクトが変換ルールを持つのはだめプログラミングな気がするのです。

そこで、朝本屋にいって、Javaによる画像処理プログラミング系の本を何冊か立ち読みしてきました。絶対良い方法が書いてあると思ったんですよ。

ところが・・・

どれもこれも、普通に20倍とか、+200とか、バリバリソースに書き込んだものばっかりでした。_| ̄|○

もうね、アフォかと。これって、Fortranとか、quick BASICの頃のソースをJavaで書き直しただけちゃうんかと。もっとオブジェクト指向を!

憂鬱になりながら、オブジェクト指向開発講座(別名 あんまん本)を読もう。

|

« 目標を持つと言うこと | Main | 符号付き演算と、符号無し演算 »

Comments

勉強用座標系三角形クラスと表示用三角形クラスを作成してやればいいのでは?
オレが考えたのは以下の方法
表示用三角形クラスは勉強用座標系クラスを持たせる
勉強用は基本からさらに3つに派生させる基本→勉強用各種(三角形情報違い3パターン)
表示用三角形クラスに表示用関数をつける。座標はパラメーターから渡す。
デザパタとかでいい方法がありそうな気もします。

Posted by: あん | 2004.04.09 at 10:33 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/417789

Listed below are links to weblogs that reference Javaで画像処理:

« 目標を持つと言うこと | Main | 符号付き演算と、符号無し演算 »