2007年03月23日
ProgrammingTips: グラフィックス
こんにちは、はまさんです。
私の記事は読んで貰えてるんでしょうか...、とちょっと心配になってる今日この頃です。
さてさて今回は...、プログラムでお絵描きしてみましょう。
グラフィックスは人気のある分野です。
...が、難易度かなり高め、開発環境を整えるだけで挫折してしまう人も大勢いるんじゃないでしょうか。
とりあえず、誰でも簡単に作れる Java Applet でお絵描きプログラミングに慣れましょう。
まぁ、普通に作っても面白くないので...、今回は JVM (Java Virtual Machine) で動く Scheme の実装である Kawa を使います。
まずは基本となる以下の四つの関数を定義します。
これらの関数はそれぞれ 生成/開始/終了/破棄 のタイミングで呼び出されます。
(define (init) <void> (display "init") (newline))
(define (start) <void> (display "start") (newline))
(define (stop) <void> (display "stop") (newline))
(define (destroy) <void> (display "destroy") (newline))
肝心の描画処理は paint という名前の関数の中に記述します。
(define (paint (g :: <java.awt.Graphics>)) <void>
(g:setColor (java.awt.Color:.black))
(g:drawLine 0 0 400 300))
この例では画面左上から右下へ斜めに黒い線を描いてます。
四角形を描くには drawRect 円を描くには drawArc を使います。
Graphisc2D クラスを使うと半透明描画や座標系の回転拡大縮小などの高度な機能を使うことができます。
(let ((g2d :: <java.awt.Graphics2D> g)) ... )
作ったプログラムをコンパイルしましょう。
%JAVA_HOME%/bin/java -cp kawa-1.9.1.jar kawa.repl --applet -C MyApplet.scm
コンパイルされた class を HTML に組み込んで、できあがり。
<applet code="MyApplet.class" archive="kawa-1.9.1.jar" width="400" height="300"></applet>
いかがでしょうか?
Java言語以外の言語でも JVM で動くプログラムを作れるのは面白いですよね。
最近では Ruby や Python も JVM で動くようです。
Java Applet は JVM の起動が遅いという弱点があるため、実際のところ、あまり利用されていません。しかし、長年の JVM の改良とPCスペックの向上で最新のパソコンならほとんど気にならないくらいの時間で起動するようになりました。そして、SUN によって Java のソースコードが GPL で公開されたことで、多くの開発者が Java の開発に参加できるようになりました。もう二、三年後には Java Applet も弱点が改良されて一般的に利用されるようになってるかもしれませんね。
Java はサーバサイドでは利用される事例が多いです。
Java Servlet についてもまたの機会にお話したいと思います。
私の記事は読んで貰えてるんでしょうか...、とちょっと心配になってる今日この頃です。
さてさて今回は...、プログラムでお絵描きしてみましょう。
グラフィックスは人気のある分野です。
...が、難易度かなり高め、開発環境を整えるだけで挫折してしまう人も大勢いるんじゃないでしょうか。
とりあえず、誰でも簡単に作れる Java Applet でお絵描きプログラミングに慣れましょう。
まぁ、普通に作っても面白くないので...、今回は JVM (Java Virtual Machine) で動く Scheme の実装である Kawa を使います。
まずは基本となる以下の四つの関数を定義します。
これらの関数はそれぞれ 生成/開始/終了/破棄 のタイミングで呼び出されます。
(define (init) <void> (display "init") (newline))
(define (start) <void> (display "start") (newline))
(define (stop) <void> (display "stop") (newline))
(define (destroy) <void> (display "destroy") (newline))
肝心の描画処理は paint という名前の関数の中に記述します。
(define (paint (g :: <java.awt.Graphics>)) <void>
(g:setColor (java.awt.Color:.black))
(g:drawLine 0 0 400 300))
この例では画面左上から右下へ斜めに黒い線を描いてます。
四角形を描くには drawRect 円を描くには drawArc を使います。
Graphisc2D クラスを使うと半透明描画や座標系の回転拡大縮小などの高度な機能を使うことができます。
(let ((g2d :: <java.awt.Graphics2D> g)) ... )
作ったプログラムをコンパイルしましょう。
%JAVA_HOME%/bin/java -cp kawa-1.9.1.jar kawa.repl --applet -C MyApplet.scm
コンパイルされた class を HTML に組み込んで、できあがり。
<applet code="MyApplet.class" archive="kawa-1.9.1.jar" width="400" height="300"></applet>
いかがでしょうか?
Java言語以外の言語でも JVM で動くプログラムを作れるのは面白いですよね。
最近では Ruby や Python も JVM で動くようです。
Java Applet は JVM の起動が遅いという弱点があるため、実際のところ、あまり利用されていません。しかし、長年の JVM の改良とPCスペックの向上で最新のパソコンならほとんど気にならないくらいの時間で起動するようになりました。そして、SUN によって Java のソースコードが GPL で公開されたことで、多くの開発者が Java の開発に参加できるようになりました。もう二、三年後には Java Applet も弱点が改良されて一般的に利用されるようになってるかもしれませんね。
Java はサーバサイドでは利用される事例が多いです。
Java Servlet についてもまたの機会にお話したいと思います。

