亀を利用する vol.没

# 要約
とある訳の分からない課題に反発する一心でDLAもどきを作成し、詰んだ話

# DLAについて
拡散現象を伴う凝集等の計算モデルとして考案されたのが起源・・・・・・らしい

ランダムウォークを利用するためブラウン運動とかを再現できる、と言えばできる

正直謎としか言いようがない

# 成果物

![kameui.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293790/fd853c82-f3a4-3c04-a80c-c101d72cc48f.png)

UIはこんな感じRollで移動回数、Speedで移動量、running_turtleで~~走る亀~~粒子数をそれぞれ指定

実際に走る風景はこんな感じ

![kameuiall.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293790/3427f886-bac0-d644-f808-53f16fab91ee.png)

# 達成したかった・・・

使い方として2種類以上の亀によりできる絡み合い点を基にゲルのサイズを云々までやりたかった

条件とか色々と考え始めて頭がパーンしたのでできませんでしたが

後でソース載せますけど、亀の走る点は全てリストに格納されてます

元々亀を走らせる気が無く、matplotでイェアするつもりでしたが、動きがないとらしくないので・・・

だから、点の重複度等を利用すれば評価できなくはないと思います

見てるだけでも何だか笑えてくるので使ってみてください

# 課題
タートルモジュールってウインドウを削除しても裏で動き続けてるんですかね？

画面をリセットして再度図を描きなおそうというのを実装しようとして沼にはまりました

`turtle.reset()`とか色々利用しましたが全くできませんでした

エラーメッセージとまではいかないんですが、完全にモジュールの起動を停止できないんですかね？

<br>

結局、アルゴリズムとシミュレーションの違いって何でしょう？

例えば、微分方程式を数値的に解くためのアルゴリズムにルンゲクッタ法とかオイラー法とか分かります

けれど、相転移等を解くためにDLAやパーコレーションを使うなら、これらがアルゴリズムになりえるのかと思います

どれくらいの粒子量でクラスターができたとかの評価くらいしか使えないのでは、と思います

つまり、私では単純化して物事を捕らえられなかったという感じです

# ソースコード
```dlamodoki.py
import random
import tkinter as tk

def randomwalk1(n,d):#第1象限
    x=[0]
    y=[0]
    a=0
    b=0
    for i in range(n):
        a += int(random.choice([(-1*d),0,d]))
        b += int(random.choice([(-1*d),0,d]))
        if (a<=0):
            a += d
            x.append(a)
            if (b<=0):
                b += d
                y.append(b)
            else:
                y.append(b)
        elif (b<=0):
            b += d
            y.append(b)
            if (a<=0):
                a += d
                x.append(a)
            else:
                x.append(a)
        else:
            x.append(a)
            y.append(b)

    return x,y

def randomwalk2(n,d):#第2象限
    x=[0]
    y=[0]
    a=0
    b=0
    for i in range(n):
        a += int(random.choice([(-1*d),0,d]))
        b += int(random.choice([(-1*d),0,d]))
        if (a>=0):
            a -= d
            x.append(a)
            if (b<=0):
                b += d
                y.append(b)
            else:
                y.append(b)
        elif (b<=0):
            b += d
            y.append(b)
            if (a>=0):
                a -= d
                x.append(a)
            else:
                x.append(a)
        else:
            x.append(a)
            y.append(b)

    return x,y

def randomwalk3(n,d):#第3象限
    x=[0]
    y=[0]
    a=0
    b=0
    for i in range(n):
        a += int(random.choice([(-1*d),0,d]))
        b += int(random.choice([(-1*d),0,d]))
        if (a>=0):
            a -= d
            x.append(a)
            if (b>=0):
                b -= d
                y.append(b)
            else:
                y.append(b)
        elif (b>=0):
            b -= d
            y.append(b)
            if (a>=0):
                a -= d
                x.append(a)
            else:
                x.append(a)
        else:
            x.append(a)
            y.append(b)

    return x,y

def randomwalk4(n,d):#第4象限
    x=[0]
    y=[0]
    a=0
    b=0
    for i in range(n):
        a += int(random.choice([(-1*d),0,d]))
        b += int(random.choice([(-1*d),0,d]))
        if (a<=0):
            a += d
            x.append(a)
            if (b>=0):
                b -= d
                y.append(b)
            else:
                y.append(b)

        elif (b>=0):
            b -= d
            y.append(b)
            if (a<=0):
                a += d
                x.append(a)
            else:
                x.append(a)

        else:
            x.append(a)
            y.append(b)
    
    return x,y

def btn_click1():
    import turtle
    n = int(txt1.get())
    d = int(txt2.get())
    run = int(txt3.get())
    color=["black", "red", "green", "blue", "cyan", "yellow", "magenta"]
    width = 1000
    height = 1000
    scr = turtle.Screen()
    scr.title ('geru')
    scr.setup (width , height, 0, 0)
    t = turtle.Turtle()
    t.shape('turtle')
    total = []
    for i in range(run):
        t.color(color[i])
        x1,y1=randomwalk1(n,d)
        x2,y2=randomwalk2(n,d)
        x3,y3=randomwalk3(n,d)
        x4,y4=randomwalk4(n,d)
        ax = x1 + x2 + x3 + x4
        ay = y1 + y2 + y3 + y4
        text.insert('1.0', 'start')
        for i in range(len(ax)):
            if (ax[i]==0):
                t.penup()
                t.home()
                t.pendown()
            else:
                t.setpos(ax[i],ay[i])
        S = abs(int(max(ax)) + int(min(ax)))
        H = abs(int(max(ay)) + int(min(ay)))
        total.append(S*H)
        text.insert('end', '\nゲルサイズ')
        text.insert('end', '\n高さ:')
        text.insert('end', H)
        text.insert('end', '\n横:')
        text.insert('end', S)
        text.insert('end', '\nthe_end')

    text.insert('end', '\n')
    text.insert('end', min(total))
    t.ht()
    turtle.Screen().exitonclick()

#全体画面の設定
root=tk.Tk()
root.title("dla_modoki")
root.geometry('300x700')
root.minsize(300,400)

#turtle_GO
lbl = tk.Label(text='Turtle_GO')
lbl.pack(fill = 'x', padx=20, side = 'top')
lb2 = tk.Label(text='Roll')
lb2.pack(fill = 'x', padx=20, side = 'top')
txt1 = tk.Entry(width=20)
txt1.pack(fill = 'x', padx=20, side = 'top')
lb3 = tk.Label(text='Speed')
lb3.pack(fill = 'x', padx=20, side = 'top')
txt2 = tk.Entry(width=20)
txt2.pack(fill = 'x', padx=20, side = 'top')
lb4 = tk.Label(text='running_turtle(1~7)')
lb4.pack(fill = 'x', padx=20, side = 'top')
txt3 = tk.Entry(width=20)
txt3.pack(fill = 'x', padx=20, side = 'top')
button1 = tk.Button(root,text="go", command=btn_click1)
button1.pack(fill = 'x', padx=20, side = 'top')

text = tk.Text(root)
text.pack(fill = 'x', padx=20, side = 'top')

root.mainloop()
```