challenge 2次元ランダムウォーク

2次元ランダムウォークをつくってみてください。

******

元は3本建てにしようかと思ったけど、上の一本に絞りました。おまけとして、3本とも下に補足しておきます。作れるようでしたら作ってみてください。

1.一次元のランダムウォークを作ってください。

1.1 データファイルに残してください。 フォーマット:時間 位置

おまけ)

可視化が簡単な処理系・プログラミング言語でしたら実際に可視化してみてください。フォーマットしたファイルをスプレッドシートやplotutilitiesなどの可視化ソフトを使って、実際に動きをかくにんしてみましょう。:-)

2.同じように2次元のランダムウォークを作ってください。

2.1 1.1と同じようにしてください。

フォーマット:時間 x位置 y位置

3.凝りたければ、アニメーションにするもよし、3次元の動きをとるもよし、自分の想像力がいかせるところまでやってみてください。

http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%82%A6%E3%82%A9%E3%83%BC%E3%82%AF

分からないというヒトへの分かりにくいヒント:

今の位置から次の時間の位置が決まるのですが、決まりかたが、乱数で一歩後退するか一歩先にいくか?ということをやればよいです。

Posted feedbacks - Groovy

GUIで作ってみました。
画像が置けないので、画面イメージはBLOGに貼っています。
"Run"ボタンを押すたび100回ずつ動きます。
"Groovy in Action"を参考にしました。

実行結果
-------------------------
以下のURLに画面イメージ貼り付け。
http://d.hatena.ne.jp/nemo_kaz/20080730



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import groovy.swing.SwingBuilder
import java.awt.Color
import java.awt.BorderLayout as BL
import javax.swing.WindowConstants as WC
import javax.swing.BorderFactory as BF
import javax.swing.JOptionPane
swing = new SwingBuilder()
paint = swing.action(
    name: 'Run',
    closure: this.&paintGraph,
    mnemonic: 'R',
    accelerator: 'ctrl R'
)
about = swing.action(
    name: 'About',
    closure: this.&showAbout,
    mnemonic: 'A',
    accelerator: 'F1'
)
frame = swing.frame(title:'2次元ランダムウォーク',
location:[100,100], size:[300,300],
defaultCloseOperation:WC.EXIT_ON_CLOSE) {
    menuBar (){
        menu(mnemonic:'A','Action'){
        menuItem(action:paint)
        }
        glue()
        menu(mnemonic:'H','Help'){
            menuItem(action:about)
        }
    }
    panel (border:BF.createEmptyBorder(6,6,6,6)) {
        borderLayout()
    
        vbox(constraints: BL.CENTER,border:BF.createTitledBorder('Runボタンを押すたびに100回動きます')) {
            panel(id:'canvas')
        }

        hbox (constraints: BL.SOUTH){
            hstrut(width:10)
            button(action:paint)
        }
    }
}

frame.show()

def labeledSpinner(label, value){
    swing.label(label)
    swing.hstrut()
    swing.spinner(id:label, stateChanged:this.&paintGraph,
    model:swing.spinnerNumberModel(value:value))
}
    gfx = swing.canvas.graphics
    gfx.color = new Color(255, 255, 150)
    gfx.color = Color.red
    xpos = 100
    ypos = 100
def paintGraph(event) {

    int width = swing.canvas.size.width
    int height = swing.canvas.size.height
    
    1.upto(100) {
        xdir = Math.random()
        ydir = Math.random()
        if (xdir <0.3333 &&  xpos >5)         { xpos-=5 }
        if (xdir >0.6666 && (xpos < width-5)) { xpos+=5 }
        if (ydir <0.3333 &&  ypos >5)         { ypos-=5 }
        if (ydir >0.6666 && (ypos <height-5)) { ypos+=5 }
        gfx.fillRect(xpos,ypos,4,4)
    }
}
void showAbout(event) {
    JOptionPane.showMessageDialog(frame,
    '''2次元ランダムウォーク
赤い四角がランダムに歩きます。''')
}

Index

Feed

Other

Link

Pathtraq

loading...