- PR -

Graphics2Dの中身を知りたい

投稿者投稿内容
ゴールデン
常連さん
会議室デビュー日: 2004/08/22
投稿数: 46
投稿日時: 2004-10-31 07:02
例えば、Math.rondomは、どのような計算で作られているのか、などのjavaで用意されているクラスやインターフェースの中身を知りたいのですが、どこをどう探したら、それを見ることがでいるのでしょうか。一番知りたいのは、Graphics2Dのrotateの中身です。宜しくお願いします。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-10-31 11:10
ゴールデンさん、こんにちは。

■Math.rondomっていうのは無いですが、java.util.Randomクラスのこと
でしょうか?
これは、SDKをインストールしたときに、ソースも選択していれば
Javaのホームディレクトリに src.zipというのがあると思いますが、
これを展開すれば、java/util/Random.javaで閲覧できます。

■Graphics2Dは abstractクラスで、通常は sun.java2d.SunGraphics2D
が具象クラスです。ただしこれは上記 src.zipには含まれていないので、
どうしてもソースが見たければ、Community Source Licenseに同意
して別途 Java VMごとソースをダウンロードしてくる必要があります。
※でも想像がつくように、回転は java.awt.geom.AffineTransform#rotate()
呼んでるだけですから、特別にダウンロードしなくとも src.zip中の
java/awt/geom/AffineTransform.javaを見れば良いわけです。

で、rondomも affineも、やってることは書店で売られている
アルゴリズム事典に書かれているものです。
ゴールデン
常連さん
会議室デビュー日: 2004/08/22
投稿数: 46
投稿日時: 2004-10-31 12:41
Kissingerさん、ありがとうございます。
srcという中にあることを知らなくて、いろいろ探して見つからなかったので…、
それと、以前Graphics2Dを使って図形を回転することを教えていただいたのですが、今、Graphics3Dを使わないで画像キューブをマウスドラッグで回転させることをやっています。ふつうの計算では、その中で、図形を回転することでの空白ピクセルの穴ができてしまうので、それをGraphics2Dのrotateのように、空白ピクセルの出ない計算を書きたいのです。なので中身を見たいのです。javaによる図形処理入門という本で、勉強しましたが、画像キューブの回転は書かれていないので、アルゴリズムの本を読めばそのようなことはだいたい載っているのでしょうか。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-10-31 13:24
unibon です。こんにちわ。

Graphics2D は abstract なクラスであり、rotate メソッドも abstract なメソッドなので、src.zip の中には実装コードは含まれていません。SunGraphics2D クラスなどの実装クラスのなかにコードがありますが、これは別途契約(無料)して、ダウンロードする必要があります。
http://wwws.sun.com/software/communitysource/j2se/java2/download.html
ただ、こういうものは見ても分かりやすくはなってないかもしれません。
また、ビットマップの rotate などは、もしかしたら、OS(Windows 等)が持つ API に委ねているだけで、そもそもコードは持ってないかもしれません。でも、アクセラレーターをまったく使わないモードもサポートしなければならないので、地道な1ピクセル毎の転送もあるのかな?

回転の原理だけならアルゴリズムの本にも載っているはずです。
ゴールデン
常連さん
会議室デビュー日: 2004/08/22
投稿数: 46
投稿日時: 2004-10-31 14:54
unibonさん、ありがとうございます。
「javaによる図形処理入門」の本にあるように、頂点を指定して、fillPolygonで面を作るものや、回転の原理は分かって、もうやってみて、できました。ただ、画像キューブとなると、頂点を指定したキューブと違って、1つ1つのピクセルを回転させるので、計算上、表示させたとき、空白のピクセルが生まれてしまうのです。知りたいのは、回転の原理ではなくて、空白のピクセルを出さない計算方法です。それはアルゴリズムの本にだいたい載っているのでしょうか。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-10-31 15:30
ゴールデンさん、

私は以前、ゴールデンさんの質問に対して、空白のピクセルが
空かないようにする方法を回答したのですが、読んでいただい
たでしょうか?

もし未だお読みで無いようでしたら、一度読んでみてください。
ゴールデン
常連さん
会議室デビュー日: 2004/08/22
投稿数: 46
投稿日時: 2004-10-31 16:23
Kissingerさん、ありがとうございます。
マーチン・ファウラーの『リファクタリング』という本でしょうか。
教えていただいたのに、まだ読んでいないので、次に購入してみたいと思います。
ありがとうございました。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-10-31 16:44
引用:
マーチン・ファウラーの『リファクタリング』という本でしょうか。


いや、それはどうしたらわかりやすいプログラムが書けるかについて
書いたもので、空白とは関係ありません。


8月22日 の 12時過ぎのを引用しておきますので、よければ
参考にしてください。
引用:

変換元のピクセルから変換先のピクセルを求めているために
整数への切捨てでそうなったのでしょう。

逆に、変換先のピクセルに対応する変換もとのピクセルを求め
る様にしたら隙間は空かなくなると思います。


なお、この方法は Java3Dどころか、Java2Dすら必要ありません。
コードは異なりますが、原理的には JDK 1.1.xでも実現可能です。

スキルアップ/キャリアアップ(JOB@IT)