[StarLogo/fujim2]
[ トップ ]   [ 差分 | バックアップ | リロード ]   [ 一覧 | 単語検索 | 最終更新 | ヘルプ ]

CONTENTS

  • FrontPage
  • StarLogoについて
  • こんな人におすすめ
  • StarLogoのインストール
  • StarLogoの簡単な入門
  • StarLogo TIPS
  • StarLogoのサンプル解説
  • StarLogo関連リンク集
  • OpenStarLogo
  • StarLogoTNG
  • StarLogoNova
  • 実験・研究
  • Petit-Hack
  • 文献
  • ご意見ご感想など
  • このページについて

最新の10件
2019-12-28
  • タートルグラフィックス
2019-01-27
  • FrontPage
  • StarLogo日本語化
  • Petit-Hack
  • このページについて
  • コメント/ご意見ご感想など
  • ご意見ご感想など
  • 文献
  • 実験・研究
  • こんな人におすすめ

BarChart

Last-modified: 2019-01-27 (日) 03:30:26 (1518d)

StarLogo TIPS

StarLogo-BarChart-Window.png

  • 方針
  • 具体的なやりかた
    • グラフ用データの作成(make-visdata手続き)
    • 棒グラフ表示(view-barchart手続き)
  • データの並び替えプログラム
  • 表示例
    • ソートしたデータ
    • ばらばらに並べ替えたデータ
  • 実装コード
  • GUI
  • コード
    • 外部変数と、初期化手続き
  • データから表示用データを作成
    • 棒グラフの表示
    • shuffle
    • テスト用
      • test-shuffle
      • test-qsort

StarLogoは、マルチエージェント・シミュレーション・システムとして、時間と共に 変化するタートルの数や、変数の値をいくつかの形式で表示するグラフ機能が既に ありますが、ここでは、StarLogoのタートルとパッチを使って棒グラフの作成を 試みました。意味があるかどうかは別。

方針 †

数値データのリストを与えたときに、その棒グラフを生成してパッチに表示する。 「棒」はタートルの軌跡として描かせる。

データ自身をを作ったり操作したりする操作とグラフの作成部分の手続きが なるべく干渉しないように、データのリストから、表示のためのタートルを 含むデータをいったん作ってから、それを使って表示します。

↑

具体的なやりかた †

↑

グラフ用データの作成(make-visdata手続き) †

データ: [200 45 666 ] ---> グラフ用データ[ [0 200][1 45][2 666] ]

新しく作った部分リスト、[0 200]の1つめの要素は、表示に使うタートルの 番号とします。

↑

棒グラフ表示(view-barchart手続き) †

データの数と、データの上限と下限の絶対値の最大値を使って 全体の表示をパッチに収まるようにしました。

↑

データの並び替えプログラム †

表示するためのデータは、適当な範囲で乱数によって生成しましたが、 それを、それをソートして確認するために、QuickSortを使いました。 また、ソートされたデータをまたばらばらにしたりするために、Shuffle手続き を作りました。

↑

表示例 †

↑

ソートしたデータ †

StarLogo-BarChart-QSortpng.png
↑

ばらばらに並べ替えたデータ †

StarLogo-BarChart-Shuffle.png
↑

実装コード †

試行錯誤の上作ったので、あまり、美しくなく、まだ洗練の余地もあるかと 思いますが、載せておきます。

↑

GUI †

次の様なものを配置しています。

GUI名機能種類
initinit手続きボタン
test-shuffleshuffleのテスト手続きボタン
test-qsortqsortのテスト手続きボタン
ndatandata(データ数)の設定用スライダ
↑

コード †

↑

外部変数と、初期化手続き †

初期化では、データの生成を行っています

globals [ work dmin dmax datas ]

to init
  set datas []
  set dmin -22
  set dmax 33
  dotimes [:i ndata]  [
     set datas (lput (dmin + (random (dmax - dmin))) datas)
  ]
end
↑

データから表示用データを作成 †

; 
; (d1 d2 d3) -> ((t0 d1)(t1 d2)(t3 d3))
;
to make-visdata :datas
  cp
  ct
  let [:vdatas []]
  set work []
  create-turtles (length :datas)
  dotimes [:i (length :datas)]  [
      let [:data (first (sublist :datas :i :i))]
      ask-turtle (:i - 1) [ 
          set work
               (lput 
                   (list 
                      who 
                      :data
                   )
                   work
                )
           
           seth 0
      ]
      print work
  ]
  set :vdatas work
  print ":vdatas" print :vdatas
  output :vdatas
end 
↑

棒グラフの表示 †

to view-barchart :datas

  let [:dmax (max-of-list :datas)]
  let [:dmin (min-of-list :datas)]
  let [:dmax max-of-list  (list (abs :dmax) (abs :dmin))]
  let [:ndata length(:datas)]
  let [:xmin (0 - screen-half-width)]
  let [:ymin (0 - screen-half-height)]
  let [:xmax (0 + screen-half-width)]
  let [:ymax (0 + screen-half-height)]
  let [:sx ((:xmax - :xmin) / :ndata)]
  let [:sy ((:ymax - :ymin) / :ndata)]
  let [:rat (:dmax / (:ymax - :ymin))]

  let [:vdatas (make-visdata :datas)]
  print ":vdatas" print :vdatas
  dotimes [:i :ndata][ 
      let [:vdata (first (sublist :vdatas :i :i))]
      let [:t (first :vdata)]
      let [:d ((first (butfirst :vdata)) * :sy)]
      ask-turtle :t [
         let [:x (:xmin + (:i * :sx)) ]
         let [:y :ymin]
         setxy :x 0
         pd
         fd (:d / :rat / :sy * 0.5)
      ]
  ]
end
↑

shuffle †

リスト内の適当な二箇所のデータを入れ替えることを繰り返しています。

to shuffle :datas
   dotimes [:i 100][ ; magic number ...
       let [:rn1 ((random (length datas)) + 1)]
       let [:rn2 ((random (length datas)) + 1)]
       let [:d1 (first (sublist :datas :rn1 :rn1))]
       let [:d2 (first (sublist :datas :rn2 :rn2))]
       setitem :rn1 :datas :d2
       setitem :rn2 :datas :d1
   ]
   output :datas
end
↑

テスト用 †

データを並び替えて、棒グラフを表示するというものです。

↑

test-shuffle †

to test-shuffle
  set datas (shuffle datas)
  print datas
  view-barchart datas
end
↑

test-qsort †

to test-qsort 
   set datas (qsort datas)
   print datas
   view-barchart datas
end

Counter: 520, today: 1, yesterday: 0

Link: StarLogo TIPS(1518d)

添付ファイル: fileStarLogo-BarChart-Window.png 777件 [詳細] fileStarLogo-BarChart-Shuffle.png 764件 [詳細] fileStarLogo-BarChart-QSortpng.png 736件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-01-27 (日) 03:30:26 (1518d)
Link: StarLogo TIPS(1518d)
Site admin: anonymous

PukiWiki 1.5.0 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji. Powered by PHP 5.6.40. HTML convert time: 0.016 sec.