TIM Labs

GHCで直接Glossを使えるようになった

| コメント(0) | トラックバック(0)
import Graphics.Gloss
が最初の行にあるので、まずは、Graphics.Glossについて調べてみよう。

gloss-1.7.8.1: Painless 2D vector graphics, animations and simulations.

haskell.orgのちゃんとした正式ドキュメントと、前回書いたものを比較してみよう。
Webから実行したときのプログラムがこれ。

import Graphics.Gloss
picture = circle 80

そして、Graphics.Gloss のページのサンプルプログラムがこれ。

import Graphics.Gloss
main = display (InWindow "Nice Window" (200, 200) (10, 10)) white (Circle 80)

mainがあって、displayの後ろのごちゃごちゃあって、最後に (Circle 80) とある。

まずは、これをそのまま sample.hs としてソースプログラムを作っちゃって、実行してみよう。

$ cat sample.hs
import Graphics.Gloss
main = display (InWindow "Nice Window" (200, 200) (10, 10)) white (circle 80)
$ ghc sample.hs
[1 of 1] Compiling Main             ( sample.hs, sample.o )
Linking sample ...
$ sample

出来上がった sample を実行すると、次のウィンドウが画面左上の方に出た。

sample-circle.png

さて、 display について調べよう。

displaySource
:: Display    Display mode.
-> Color    Background color.
-> Picture    The picture to draw.
-> IO ()
    
Open a new window and display the given picture.

との説明があった。
さらに、 Display については、

InWindow String (Int, Int) (Int, Int)   
Display in a window with the given name, size and position.

とあった、 InWindow の直後の文字列が、ウィンドウの名前になるようだ。
実際、sample.hs では、"Nice Window"としていたのが、ウィンドウのタイトルバーの位置に示されている。

最初の (Int, Int) がウィンドウのサイズ、次の (Int, Int) がウィンドウの位置である。

そして、display の第2パラメータが white になっていたが、これは背景色。

display の第3パラメータに指定されたもの(Picture)を表示する。
ここでは、Circle 80 である。

ということで、sample.hs を少しだけ書き換えてみた。

import Graphics.Gloss
display = circle 80

main = display (InWindow "Nice Window" (500, 500) (10, 10)) white display

WebからGlossを使うときには、このようになっているソースの最後のmainの行を除いた部分をWebで入力するのだろう。

このままでは、図形が1つだけしか描けない。
複数の図形を描くには、次の様にするとよい。

picture = pictures [
    circle 80,
    rectangleWire 200 100 ]

カンマ(,)で区切って、[]の中に並べると、それらを描いてくれるようだ。

$ cat sample2.hs
import Graphics.Gloss
picture = pictures [
    circle 80,
    rectangleWire 200 100 ]

main = display (InWindow "Nice Window" (300, 200) (10, 10)) white picture
$ ghc sample2
[1 of 1] Compiling Main             ( sample2.hs, sample2.o )
Linking sample2 ...
$ sample2

sample-circlebox.png
年内に何とかGlossで絵が描けるところまでできたので、安心して年が越せる。

最初の授業がまだ終わらないのだが、長くなったので、残りは次回にしよう。

トラックバック(0)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/352

コメントする

このブログ記事について

このページは、fujiが2012年12月31日 11:00に書いたブログ記事です。

ひとつ前のブログ記事は「第1週目の授業、とりあえず絵を出そう」です。

次のブログ記事は「エディンバラ大学の関数プログラミングの講義」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。