ジェネラティブアート論
(→予定) |
(→概要) |
||
(1人の利用者による、間の41版が非表示) | |||
1行: | 1行: | ||
== 概要 == | == 概要 == | ||
;前提スキル | ;前提スキル | ||
− | + | メディアプログラミング演習Iを履修したのと同等のプログラミングスキルがあるものとして、授業を進めます。 | |
もし、プログラミングに不安があるなら、上記テキストを使って、自分で予習や自習をしてください。 | もし、プログラミングに不安があるなら、上記テキストを使って、自分で予習や自習をしてください。 | ||
openFrameworksはProcessingと似ているため、Processingを知っていると、理解が早いです。 | openFrameworksはProcessingと似ているため、Processingを知っていると、理解が早いです。 | ||
26行: | 26行: | ||
テキストや開発環境については、以下を参照してください。 | テキストや開発環境については、以下を参照してください。 | ||
* http://www.kuhalabo.net/kxoops/modules/d3blog/details.php?bid=141 | * http://www.kuhalabo.net/kxoops/modules/d3blog/details.php?bid=141 | ||
+ | |||
+ | ドキュメント | ||
+ | http://openframeworks.jp/tutorials/ | ||
== 予定 == | == 予定 == | ||
+ | ;2018年度 | ||
+ | |||
+ | # 9/18(火) ガイダンス, 生物と情報とアート,openFrameworksプログラミング演習 | ||
+ | # 9/25(火) 幾何学図形の描画(実習) | ||
+ | #* 教科書 1章 読み物として読む。 | ||
+ | #* 教科書 2章 実際にプログラムを作ってみる。 | ||
+ | #** 新規プロジェクトの作成は、[[openFrameworks for Visual studio]]を参照 | ||
+ | #* 2-4「数値の記憶と計算」までをやり終えて、自作プログラムexeファイルを提出。 | ||
+ | #* 幾何学図形の描画、色の設定、変数 | ||
+ | #* exeファイルは、プロジェクトフォルダーのbinフォルダーの中にあります。 | ||
+ | # 10/2(火) 幾何学図形の描画(実習) | ||
+ | #* 2-8「条件分岐」までを学習し、自作プログラムexeファイルを提出。 | ||
+ | #* 繰り返し、配列、図形の移動、条件分岐 | ||
+ | #* 提出場所 '''PC > Weekly(W:) > art > int > kuhara20181002''' | ||
+ | #** ファイル名 番号_名前のローマ字 例 '''1724000_suzukiichiro.exe''' | ||
+ | # 10/9(火) (実習) | ||
+ | #* 2-11「より高度な表現」までを学習し、自作プログラムexeファイルを提出。 | ||
+ | #* マウスアクション、摩擦、重力、奇跡のフェード | ||
+ | #* この日の授業までに2章を終えてください。2章までに学んで、制作したプログラムを提出してもらいます。 | ||
+ | # 10/16(火) (実習)16:30に12号館2階カラボギャラリー集合 | ||
+ | #* カラボギャラリー見学 https://www.color.t-kougei.ac.jp/gallery/ | ||
+ | #* 3-1,2,3を学習する。 | ||
+ | #** 3-1 は、読んで理解してください。プログラム例は作らなくてもよいです。 | ||
+ | #** 3-2 は、3-2-7「画像ファイルを扱う」だけでもよい。余裕がれば、他の単元を勉強してもよいです。、 | ||
+ | #** 3-3 は、実際に新たにクラスを作成し、プログラムを作りながら、学習を進めてください。 | ||
+ | #* 3-4「アドオンの利用」以降は学習しなくてもよい。関心に応じて学習してください。 | ||
+ | #* 3-3-2「新規クラスの生成」は、[[openFrameworks for Visual studio]]を参照。 | ||
+ | # 10/23(火) クラスオブジェクトの使用、ランダムウォーク(講義・実習) | ||
+ | # 10/30(火)1次元セルオートマトン(講義・実習) | ||
+ | # 11/6(火) ライフゲーム(講義・実習) | ||
+ | # 11/13(火) ラングトンのアリ(講義・実習) | ||
+ | #* 11/20(火) 金曜振替授業日 | ||
+ | # 11/27(火) Boid(講義・実習) | ||
+ | # 12/4(火) 物理エンジン Box2D(講義・実習) | ||
+ | # 12/11(火)フラクタルと自己相似形と再帰呼び出し(講義・実習) | ||
+ | # 12/18(火) ニューラルネットワーク、遺伝的アルゴリズム(講義) | ||
+ | # 1/8(火) 小テスト | ||
+ | #* 授業で扱った内容すべてが含まれます。 | ||
+ | # 1/15(火) 予備(出席は取りません) | ||
+ | |||
+ | * 第1課題 2章までの練習プログラム | ||
+ | ** 提出締切日 10/16 | ||
+ | * 第2課題「創発ジェネラティブアートのプログラム」 | ||
+ | ** 提出締切日 1/7(月) | ||
+ | ** 「ライフゲーム、Boid、アリ、Box2D、フラクタル」の中から、1つ以上を選び、自分のオリジナリティを加えたプログラムを提出してください。 | ||
+ | ** ソースプログラムも採点の対象としますので、プロジェクトのフォルダー全体をzip圧縮して、提出して下さい。 | ||
+ | |||
;2017年度 | ;2017年度 | ||
50行: | 100行: | ||
#* 3-4「アドオンの利用」以降は学習しなくてもよい。関心に応じて学習してください。 | #* 3-4「アドオンの利用」以降は学習しなくてもよい。関心に応じて学習してください。 | ||
#* 3-3-2「新規クラスの生成」は、[[openFrameworks for Visual studio]]を参照。 | #* 3-3-2「新規クラスの生成」は、[[openFrameworks for Visual studio]]を参照。 | ||
− | # 10/31(火) | + | # 10/31(火) クラスオブジェクトの使用、ランダムウォーク(講義・実習) |
− | # 11/7(火) | + | # 11/7(火) セルオートマトン(講義・実習) |
# 11/14(火) ライフゲーム(講義・実習) | # 11/14(火) ライフゲーム(講義・実習) | ||
− | # 11/21(火) | + | # 11/21(火) ラングトンのアリ(講義・実習) |
− | # 11/28(火) | + | # 11/28(火) Boid(講義・実習) |
# 12/5(火) 物理エンジン Box2D(講義・実習) | # 12/5(火) 物理エンジン Box2D(講義・実習) | ||
# 12/12(火)フラクタルと自己相似形と再帰呼び出し(講義・実習) | # 12/12(火)フラクタルと自己相似形と再帰呼び出し(講義・実習) | ||
60行: | 110行: | ||
# 1/9(火) 小テスト | # 1/9(火) 小テスト | ||
#* 授業で扱った内容すべてが含まれます。 | #* 授業で扱った内容すべてが含まれます。 | ||
− | # 1/16(火) | + | # 1/16(火) 予備(出席は取りません) |
− | * | + | * 第1課題 2章までの練習プログラム |
− | ** 提出締切日 | + | ** 提出締切日 10/17 |
* 第2課題「セルオートマトン、フラクタルのプログラム」 | * 第2課題「セルオートマトン、フラクタルのプログラム」 | ||
− | ** 提出締切日 1/ | + | ** 提出締切日 1/8(月) |
** 「ライフゲーム、Boid、アリ、Box2D、フラクタル」の中から、1つ以上を選び、自分のオリジナリティを加えたプログラムを提出してください。 | ** 「ライフゲーム、Boid、アリ、Box2D、フラクタル」の中から、1つ以上を選び、自分のオリジナリティを加えたプログラムを提出してください。 | ||
** ソースプログラムも採点の対象としますので、プロジェクトのフォルダー全体をzip圧縮して、提出して下さい。 | ** ソースプログラムも採点の対象としますので、プロジェクトのフォルダー全体をzip圧縮して、提出して下さい。 | ||
134行: | 184行: | ||
** 例:小石と貝殻 | ** 例:小石と貝殻 | ||
** * [http://www.kuhalabo.net/~kuha/easybbs/easy_bbs4klb2.php 簡単BBS]に「生物と無生物の違いは何か?」説明してみよう。 | ** * [http://www.kuhalabo.net/~kuha/easybbs/easy_bbs4klb2.php 簡単BBS]に「生物と無生物の違いは何か?」説明してみよう。 | ||
− | * ゲノムのDNAマップ [ | + | * ゲノムのDNAマップ [https://www.ncbi.nlm.nih.gov/genome/gdv/ NCBI Genome Map Viewer] |
* [http://www.kuhalabo.net/kxoops/modules/d3blog/details.php?bid=5 ヒト一人を再生するのに必要な情報量は?] | * [http://www.kuhalabo.net/kxoops/modules/d3blog/details.php?bid=5 ヒト一人を再生するのに必要な情報量は?] | ||
155行: | 205行: | ||
*[http://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%94%E3%83%B3%E3%82%B9%E3%82%AD%E3%83%BC%E3%81%AE%E3%82%AE%E3%83%A3%E3%82%B9%E3%82%B1%E3%83%83%E3%83%88 シェルピンスキーのガスケット] | *[http://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%94%E3%83%B3%E3%82%B9%E3%82%AD%E3%83%BC%E3%81%AE%E3%82%AE%E3%83%A3%E3%82%B9%E3%82%B1%E3%83%83%E3%83%88 シェルピンスキーのガスケット] | ||
*[http://mathworld.wolfram.com/ElementaryCellularAutomaton.html Wolfram Math World 1次元セルオートマトン] / | *[http://mathworld.wolfram.com/ElementaryCellularAutomaton.html Wolfram Math World 1次元セルオートマトン] / | ||
+ | *[http://mathworld.wolfram.com/CellularAutomaton.html Wolfram Math World Cellular Automaton] | ||
=== ライフゲーム === | === ライフゲーム === | ||
*[https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0 ライフゲーム] | *[https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0 ライフゲーム] | ||
− | *[http://www.kuhalabo.net/~kuha/tutorial0/bioart/Lifegame.exe | + | *[http://www.kuhalabo.net/~kuha/tutorial0/bioart/Lifegame.exe ライフゲームのWindowsソフト] / |
− | *[http://www. | + | *[http://www.mirekw.com/ca/index.html Cellular Automata explorer] |
+ | *[http://mathworld.wolfram.com/GameofLife.html Wolfram Math World Game of Life] | ||
+ | * http://golly.sourceforge.net/ | ||
;セルオートマトン音楽 | ;セルオートマトン音楽 | ||
191行: | 244行: | ||
http://processing.org/examples/flocking.html | http://processing.org/examples/flocking.html | ||
− | == openFrameworks | + | == openFrameworks プログラミング == |
;イントロダクション | ;イントロダクション | ||
199行: | 252行: | ||
** http://openframeworks.cc/documentation/ | ** http://openframeworks.cc/documentation/ | ||
** http://yoppa.org/blog/4299.html | ** http://yoppa.org/blog/4299.html | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
; oFの公式リファレンスは以下の通り。 | ; oFの公式リファレンスは以下の通り。 | ||
http://openframeworks.cc/documentation/ | http://openframeworks.cc/documentation/ | ||
+ | === oF 0.9の変更点 === | ||
+ | |||
+ | https://qiita.com/2bbb/items/13f2e20760ec61e3ec89 | ||
+ | * 教科書のソースプログラムは、0.8ベースなので、上記の変更に注意すること。 | ||
+ | * 特に、描画系のコマンドが、ofDrawXXX()に変更になっています。例えば、以下の通り。 | ||
+ | |||
+ | * new ⇐ old | ||
+ | ** ofDrawLine ⇐ ofLine | ||
+ | ** ofDrawCurve ⇐ ofCurve | ||
+ | ** ofDrawBezier ⇐ ofBezier | ||
+ | ** ofDrawCircle ⇐ ofCircle | ||
+ | ** ofDrawEllipse ⇐ ofEllipse | ||
+ | ** ofDrawTriangle ⇐ ofTriangle | ||
+ | ** ofDrawRectangle ⇐ ofRect | ||
+ | ** ofDrawRectRounded ⇐ ofRectRounded | ||
+ | ** ofDrawSphere ⇐ ofSphere | ||
+ | ** ofDrawCone ⇐ ofCone | ||
+ | ** ofBox ⇐ ofDrawBox | ||
+ | |||
+ | === oF新規プロジェクトの作成 === | ||
+ | |||
+ | # oFフォルイダー内のprojectGeneratorフォルダー内のprojectGeneratorを実行する。 | ||
+ | # Project Path:にoFのあるフォルダーを指定する。 | ||
+ | # Project Name:に、プロジェクトの名前を入れる。 | ||
+ | # Addons:に、使用する追加機能(アドオン)を入れる。通常は、なしでよい。 | ||
+ | # Generateをクリックする。 | ||
+ | # Apps内のMyAppsにマイプロジェクトが作成されている。 | ||
+ | # Open IDEをクリックした場合 | ||
+ | #* XCodeが立ち上がることを確認する。 | ||
+ | # Closeをクリックした場合 | ||
+ | #* Apps内のMyAppsに作成したプロジェクトフォルダーを開く。 | ||
+ | #* プロジェクト名.xcodeprojファイルをクリックして、XCodeを起動する。 | ||
+ | # 作成したプロジェクトを起動し、srcを見てみる。 | ||
+ | #* ofApp.cppのメソッドの中身が空っぽ。 | ||
+ | #* ここにプログラムを書いていく。 | ||
+ | |||
+ | === oFクラスの作成 === | ||
+ | |||
+ | ==== XCode ==== | ||
+ | # 新しくクラスを作るには、'''「Fileメニュー > New > File」''' を開く。 | ||
+ | # '''「macOS」'''タブの'''「Source」'''から、'''「C++ File」'''を選び、'''「Next」'''ボタンを押す。 | ||
+ | # Nameにはクラス名を入れます。その際、'''「Also create a header file」'''のチェックを入れておきます。そして'''「Next」'''ボタンを押します。 | ||
+ | #* 名前を それぞれ'''Xxx.cpp''','''Xxx.h'''とし、場所はともに '''..\src''' とする。 | ||
+ | # '''src'''の中に'''Xxx.cpp''' と '''Xxx.h''' が新規作成される。 | ||
+ | |||
+ | ==== Visual Studio ==== | ||
+ | # 新しくクラスを作るには、'''「プロジェクト > 新しい項目の追加...」''' を開き,'''「C++ファイル」'''と'''「ヘッダーファイル」'''を一つずつ作る。 | ||
+ | #* 名前を それぞれ'''Xxx.cpp''','''Xxx.h'''とし、場所はともに '''..\src''' とする | ||
+ | #* (注)「クラスの追加」や「クラスウィザード」は使えない。 | ||
+ | # マウスカーソルをソリューションエクスプローラー上の'''src'''に置き、ハイライトさせる。 | ||
+ | # ソリューションエクスプローラー上の'''src'''の中に'''Xxx.cpp''' と '''Xxx.h''' が新規作成される。 | ||
+ | |||
+ | ヘッダファイル '''Xxx.h''' は, | ||
+ | <pre> | ||
+ | #pragma once | ||
+ | #include "ofMain.h" | ||
+ | |||
+ | class Xxx { | ||
+ | private: | ||
+ | ofPoint pos; | ||
+ | float radius; | ||
+ | |||
+ | public: | ||
+ | Xxx(); | ||
+ | void hogehoge(); | ||
+ | }; | ||
+ | </pre> | ||
+ | などと、記述する。 | ||
+ | |||
+ | * '''ofMain.h''' をインクルードし、クラスの定義の最後にセミコロンがつくことに注意する。 | ||
+ | * '''#pragma once''' は,このヘッダファイルを複数回読み込まないようにするためのもの。 | ||
+ | * 括弧で囲まれた部分 '''{...}''' には,変数の宣言やメソッド(関数)の宣言を書く | ||
+ | * '''private:''' に続く部分には,クラス内部のみで利用する変数、メソッドを宣言する。 | ||
+ | * '''public:''' に続く部分には,クラス外部からアクセスできる変数、メソッドを宣言する。 | ||
+ | * '''Xxx():''' はコンストラクターといい、クラスと同じ名前のメソッドである。クラスのインスタンスを生成するときの初期化処理などを記述する。 | ||
+ | |||
+ | C++ファイル Xxx.cpp は, | ||
+ | <pre> | ||
+ | #include "Xxx.h" // クラスのヘッダーを読み込む | ||
+ | |||
+ | Xxx::Xxx(){ | ||
+ | pos = ofPoint(ofGetWidth()/2, ofGetHeight()/2); | ||
+ | radius = 100.0; | ||
+ | } | ||
+ | |||
+ | void Xxx::hogehoge(){ | ||
+ | ofSetColor(31, 63, 255, 100); | ||
+ | ofCircle(pos.x, pos.y, radius); | ||
+ | |||
+ | ofSetColor(255, 0, 0, 200); | ||
+ | ofCircle(pos.x, pos.y, radius); | ||
+ | } | ||
+ | </pre> | ||
+ | などと、メソッドの本体を記述する。 | ||
+ | * メソッドの定義の最後にセミコロンが'''つかない'''ことに注意する。 | ||
+ | |||
+ | |||
+ | もとのcppファイルodApp.cppのヘッダーファイル'''ofApp.h'''に、Xxx.hをincludeする。 | ||
+ | 例えば、'''ofApp.h'''は、以下のとおり。 | ||
+ | <pre> | ||
+ | #pragma once | ||
+ | |||
+ | #include "ofMain.h" | ||
+ | #include "Ball.h" | ||
+ | |||
+ | class ofApp : public ofBaseApp{ | ||
+ | public: | ||
+ | bool mouse_pressed; | ||
+ | |||
+ | public: | ||
+ | void setup(); | ||
+ | void update(); | ||
+ | void draw(); | ||
+ | |||
+ | void keyPressed(int key); | ||
+ | void keyReleased(int key); | ||
+ | void mouseMoved(int x, int y ); | ||
+ | void mouseDragged(int x, int y, int button); | ||
+ | void mousePressed(int x, int y, int button); | ||
+ | void mouseReleased(int x, int y, int button); | ||
+ | void windowResized(int w, int h); | ||
+ | void dragEvent(ofDragInfo dragInfo); | ||
+ | void gotMessage(ofMessage msg); | ||
+ | |||
+ | Xxx myCbj; | ||
+ | }; | ||
+ | </pre> | ||
+ | '''public'''の領域に'''Xxxクラス'''のインスタンス'''myObj'''を宣言している。 | ||
=== [[1つのボールがふらふら動く]] === | === [[1つのボールがふらふら動く]] === | ||
223行: | 396行: | ||
=== [[ライフゲーム]] === | === [[ライフゲーム]] === | ||
+ | |||
+ | === [[Langton's Ant]] === | ||
=== [[Boid]] === | === [[Boid]] === | ||
− | |||
− | |||
=== [[物理エンジン Box2D]] === | === [[物理エンジン Box2D]] === | ||
=== [[自己相似形]] === | === [[自己相似形]] === | ||
− | |||
=== Tips === | === Tips === | ||
272行: | 444行: | ||
</pre> | </pre> | ||
− | == フラクタル == | + | == [[フラクタル]] == |
− | + | ||
− | + | == [[脳]] == | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | == | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | [ | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
== Neural Networks == | == Neural Networks == | ||
331行: | 467行: | ||
*geno typeとpheno type | *geno typeとpheno type | ||
*GAの概念と応用例 | *GAの概念と応用例 | ||
− | **[http://www.kuhalabo.net/~kuha/tutorial0/bioart/papperedmoss.gif ペパードモスの絵],[ | + | **[http://www.kuhalabo.net/~kuha/tutorial0/bioart/papperedmoss.gif ペパードモスの絵],[https://www.gao.ne.jp/~tgs1698/spx-js/spx-js.htm ペパードモス・ゲーム] |
**[http://prisonersdilemma.groenefee.nl/ The Prisoner's Dilemma] | **[http://prisonersdilemma.groenefee.nl/ The Prisoner's Dilemma] | ||
− | **[http://www.kuhalabo.net/~kuha/tutorial0/bioart/art/ | + | **[http://www.kuhalabo.net/~kuha/tutorial0/bioart/art/LGPCforArt.htm LGPC for ART] |
+ | **[http://www.intlab.soka.ac.jp/~unemi/sbart/index-j.html SBART] | ||
**[http://www.youtube.com/watch?v=8vzTCC-jbwM&feature=youtube_gdata_player GAでブランコこぎを学習] | **[http://www.youtube.com/watch?v=8vzTCC-jbwM&feature=youtube_gdata_player GAでブランコこぎを学習] | ||
+ | |||
+ | === 参考 === | ||
+ | * https://www.23andme.com/ | ||
== 小テスト == | == 小テスト == |
2021年3月8日 (月) 08:22時点における最新版
目次 |
[編集] 概要
- 前提スキル
メディアプログラミング演習Iを履修したのと同等のプログラミングスキルがあるものとして、授業を進めます。 もし、プログラミングに不安があるなら、上記テキストを使って、自分で予習や自習をしてください。 openFrameworksはProcessingと似ているため、Processingを知っていると、理解が早いです。
- 成績評価
- 出席:学生証scan+Minutes paper
- 課題:セルオートマトン課題、再帰呼び出し図形課題、複素平面フラクタル課題
- 小テスト:ハイスコア
- 授業概要及び到達目標
- インタラクティブアートは芸術を基盤として科学や工学を統合する新しい領域である。生物科学に関連した分野として、人工生命、ライフゲーム、フラクタル、オートマトン、遺伝的アルゴリズム、ニューラルネットワークなど応用範囲の広いものが数多く存在する。
そういった生物に見られる特徴をアートに応用したジェネラティブアートの作品をC++のプログラミングを使用して、実際に作成してみる。
本講義の目標は以下の通り。
- 生物の特徴と生物的なシステムについて理解する。
- 複雑系システムについて理解し、応用例を作成できる。
- openFrameworksを使って作品のプログラミングができる。
[編集] 開発環境
開発環境としてopenFrameworks for Visual studioを使用します。
テキストや開発環境については、以下を参照してください。
ドキュメント http://openframeworks.jp/tutorials/
[編集] 予定
- 2018年度
- 9/18(火) ガイダンス, 生物と情報とアート,openFrameworksプログラミング演習
- 9/25(火) 幾何学図形の描画(実習)
- 教科書 1章 読み物として読む。
- 教科書 2章 実際にプログラムを作ってみる。
- 新規プロジェクトの作成は、openFrameworks for Visual studioを参照
- 2-4「数値の記憶と計算」までをやり終えて、自作プログラムexeファイルを提出。
- 幾何学図形の描画、色の設定、変数
- exeファイルは、プロジェクトフォルダーのbinフォルダーの中にあります。
- 10/2(火) 幾何学図形の描画(実習)
- 2-8「条件分岐」までを学習し、自作プログラムexeファイルを提出。
- 繰り返し、配列、図形の移動、条件分岐
- 提出場所 PC > Weekly(W:) > art > int > kuhara20181002
- ファイル名 番号_名前のローマ字 例 1724000_suzukiichiro.exe
- 10/9(火) (実習)
- 2-11「より高度な表現」までを学習し、自作プログラムexeファイルを提出。
- マウスアクション、摩擦、重力、奇跡のフェード
- この日の授業までに2章を終えてください。2章までに学んで、制作したプログラムを提出してもらいます。
- 10/16(火) (実習)16:30に12号館2階カラボギャラリー集合
- カラボギャラリー見学 https://www.color.t-kougei.ac.jp/gallery/
- 3-1,2,3を学習する。
- 3-1 は、読んで理解してください。プログラム例は作らなくてもよいです。
- 3-2 は、3-2-7「画像ファイルを扱う」だけでもよい。余裕がれば、他の単元を勉強してもよいです。、
- 3-3 は、実際に新たにクラスを作成し、プログラムを作りながら、学習を進めてください。
- 3-4「アドオンの利用」以降は学習しなくてもよい。関心に応じて学習してください。
- 3-3-2「新規クラスの生成」は、openFrameworks for Visual studioを参照。
- 10/23(火) クラスオブジェクトの使用、ランダムウォーク(講義・実習)
- 10/30(火)1次元セルオートマトン(講義・実習)
- 11/6(火) ライフゲーム(講義・実習)
- 11/13(火) ラングトンのアリ(講義・実習)
- 11/20(火) 金曜振替授業日
- 11/27(火) Boid(講義・実習)
- 12/4(火) 物理エンジン Box2D(講義・実習)
- 12/11(火)フラクタルと自己相似形と再帰呼び出し(講義・実習)
- 12/18(火) ニューラルネットワーク、遺伝的アルゴリズム(講義)
- 1/8(火) 小テスト
- 授業で扱った内容すべてが含まれます。
- 1/15(火) 予備(出席は取りません)
- 第1課題 2章までの練習プログラム
- 提出締切日 10/16
- 第2課題「創発ジェネラティブアートのプログラム」
- 提出締切日 1/7(月)
- 「ライフゲーム、Boid、アリ、Box2D、フラクタル」の中から、1つ以上を選び、自分のオリジナリティを加えたプログラムを提出してください。
- ソースプログラムも採点の対象としますので、プロジェクトのフォルダー全体をzip圧縮して、提出して下さい。
- 2017年度
- 9/19(火) ガイダンス, 生物と情報とアート,openFrameworksプログラミング演習
- 9/26(火) openFrameworks C++プログラミング(実習)
- 教科書 1章 読み物として読む。
- 教科書 2章 実際にプログラムを作ってみる。
- 新規プロジェクトの作成は、openFrameworks for Visual studioを参照
- 2-4「数値の記憶と計算」までをやり終えて、自作プログラムexeファイルを提出。
- 幾何学図形の描画、色の設定、変数
- exeファイルは、プロジェクトフォルダーのbinフォルダーの中にあります。
- 10/3(火) 幾何学図形の描画(実習)
- 2-8「条件分岐」までを学習し、自作プログラムexeファイルを提出。
- 繰り返し、配列、図形の移動、条件分岐
- 10/17(火) (実習)
- 2-11「より高度な表現」までを学習し、自作プログラムexeファイルを提出。
- マウスアクション、摩擦、重力、奇跡のフェード
- この日の授業までに2章を終えてください。2章までに学んで、制作したプログラムを提出してもらいます。
- 10/24(火) (実習)
- 3-1、2,3を学習する。
- 3-2に関して、余裕がない場合、3-2-7「画像ファイルを扱う」だけでもよい。
- 3-4「アドオンの利用」以降は学習しなくてもよい。関心に応じて学習してください。
- 3-3-2「新規クラスの生成」は、openFrameworks for Visual studioを参照。
- 3-1、2,3を学習する。
- 10/31(火) クラスオブジェクトの使用、ランダムウォーク(講義・実習)
- 11/7(火) セルオートマトン(講義・実習)
- 11/14(火) ライフゲーム(講義・実習)
- 11/21(火) ラングトンのアリ(講義・実習)
- 11/28(火) Boid(講義・実習)
- 12/5(火) 物理エンジン Box2D(講義・実習)
- 12/12(火)フラクタルと自己相似形と再帰呼び出し(講義・実習)
- 12/19(火) ニューラルネットワーク、遺伝的アルゴリズム(講義)
- 1/9(火) 小テスト
- 授業で扱った内容すべてが含まれます。
- 1/16(火) 予備(出席は取りません)
- 第1課題 2章までの練習プログラム
- 提出締切日 10/17
- 第2課題「セルオートマトン、フラクタルのプログラム」
- 提出締切日 1/8(月)
- 「ライフゲーム、Boid、アリ、Box2D、フラクタル」の中から、1つ以上を選び、自分のオリジナリティを加えたプログラムを提出してください。
- ソースプログラムも採点の対象としますので、プロジェクトのフォルダー全体をzip圧縮して、提出して下さい。
- 2016年度
- 9/20(火) ガイダンス, 生物と情報とアート,openFrameworksプログラミング演習
- 9/27(火) openFrameworks C++プログラミング
- 教科書 1章 読み物として読む。
- 教科書 2章 実際にプログラムを作ってみる。
- 新規プロジェクトの作成は、openFrameworks for Visual studioを参照
- 2-4「数値の記憶と計算」までをやり終えて、自作プログラムexeファイルを提出。
- 幾何学図形の描画、色の設定、変数
- exeファイルは、プロジェクトフォルダーのbinフォルダーの中にあります。
- 10/4(火) 幾何学図形の描画
- 2-8「条件分岐」までを学習し、自作プログラムexeファイルを提出。
- 繰り返し、配列、図形の移動、条件分岐
- 10/18(火)
- 2-11「より高度な表現」までを学習し、自作プログラムexeファイルを提出。
- マウスアクション、摩擦、重力、奇跡のフェード
- 10/25(火)
- 3-1、2,3を学習する。
- 3-2に関して、余裕がない場合、3-2-7「画像ファイルを扱う」だけでもよい。
- 3-4「アドオンの利用」以降は学習しなくてもよい。関心に応じて学習してください。
- 3-3-2「新規クラスの生成」は、openFrameworks for Visual studioを参照。
- 3-1、2,3を学習する。
- 11/1(火) セルオートマトン
- 11/8(火) ランダムウォーク
- 11/15(火) ライフゲーム
- 11/22(火) Boid
- 11/29(火) ラングトンのアリ
- 12/6(火) 物理エンジン Box2D
- 12/13(火)フラクタルと自己相似形と再帰呼び出し
- 12/20(火) ニューラルネットワーク、遺伝的アルゴリズム
- 1/17(火) 小テスト
- 授業で扱った内容すべてが含まれます。
- 1/24(火) 予備
- 第1課題「ランダムウォークのプログラム」
- 提出締切日 11/14(月)
- 第2課題「セルオートマトン、フラクタルのプログラム」
- 提出締切日 1/13(金)
- 「ライフゲーム、Boid、アリ、Box2D、フラクタル」の中から、最低2つのプログラムを提出してください。
- 3つ以上提出してもかまいません。その場合、上位2つの課題を点数として扱います。
- ソースプログラムも採点の対象としますので、プロジェクトのフォルダー全体をzip圧縮して、提出して下さい。
- 2015年度
- 9/29(火) ガイダンス, 生物と情報とアート,openFrameworksプログラミング演習
- 10/6(火) openFrameworks C++プログラミング
- 10/13(火) 幾何学図形の描画
- 10/20(火) ランダムウォーク
- 10/27(火) セルオートマトン
- 11/10(火) ライフゲーム
- 11/17(火) ラングトンのアリ
- 12/1(火) アトラクティブフォース
- 12/8(火) レイノルズボイド
- 12/15(火) 物理エンジン Box2D
- 12/22(火) フラクタルと再帰呼び出し
- 1/5(火) 自己相似形と再帰呼び出し
- 1/12(火) ニューラルネットワーク
- 1/19(火) 遺伝的アルゴリズム
- 1/26(火) 小テスト
- 1/29(金) 第1課題、第2課題の提出締切日
[編集] 生物と情報とアート
- 生物とは? 生物の特徴とは?
- 例:小石と貝殻
- * 簡単BBSに「生物と無生物の違いは何か?」説明してみよう。
- ゲノムのDNAマップ NCBI Genome Map Viewer
- ヒト一人を再生するのに必要な情報量は?
[編集] メモ
Visual Studioのショートカット
- Ctrl-K Ctrl-C コメントアウト
- Ctrl-K Ctrl-U コメントアウト解除
- Ctrl-K Ctrl-F インデントをそろえる
[編集] 複雑系
[編集] セルオートマトン
- セルオートマトン
- Elementary cellular automaton
- シェルピンスキーのガスケット
- Wolfram Math World 1次元セルオートマトン /
- Wolfram Math World Cellular Automaton
[編集] ライフゲーム
- ライフゲーム
- ライフゲームのWindowsソフト /
- Cellular Automata explorer
- Wolfram Math World Game of Life
- http://golly.sourceforge.net/
- セルオートマトン音楽
WolframTones/ CAMUS/ Glitch DS/ Life Game Orchestra /
- ギャラリー
Modern Cellular Automata/ CArt gallery/ Cellular Automata Art/ ASCII Art Cell Automaton/
- 参考
ワイヤワールド /
[編集] 人工生命
ラングトンのアリ / ラングトンのループ / 自己増殖ループ / Reynolds Boid /
http://www.local-guru.net/blog/2010/8/19/openframeworks-boid-demo
https://gist.github.com/tado/6603347
Birds Algorhythm Craig Reynolds
http://processing.org/examples/flocking.html
[編集] openFrameworks プログラミング
- イントロダクション
- openFrameworks for Visual studio
- oFの公式リファレンスは以下の通り。
http://openframeworks.cc/documentation/
[編集] oF 0.9の変更点
https://qiita.com/2bbb/items/13f2e20760ec61e3ec89
- 教科書のソースプログラムは、0.8ベースなので、上記の変更に注意すること。
- 特に、描画系のコマンドが、ofDrawXXX()に変更になっています。例えば、以下の通り。
- new ⇐ old
- ofDrawLine ⇐ ofLine
- ofDrawCurve ⇐ ofCurve
- ofDrawBezier ⇐ ofBezier
- ofDrawCircle ⇐ ofCircle
- ofDrawEllipse ⇐ ofEllipse
- ofDrawTriangle ⇐ ofTriangle
- ofDrawRectangle ⇐ ofRect
- ofDrawRectRounded ⇐ ofRectRounded
- ofDrawSphere ⇐ ofSphere
- ofDrawCone ⇐ ofCone
- ofBox ⇐ ofDrawBox
[編集] oF新規プロジェクトの作成
- oFフォルイダー内のprojectGeneratorフォルダー内のprojectGeneratorを実行する。
- Project Path:にoFのあるフォルダーを指定する。
- Project Name:に、プロジェクトの名前を入れる。
- Addons:に、使用する追加機能(アドオン)を入れる。通常は、なしでよい。
- Generateをクリックする。
- Apps内のMyAppsにマイプロジェクトが作成されている。
- Open IDEをクリックした場合
- XCodeが立ち上がることを確認する。
- Closeをクリックした場合
- Apps内のMyAppsに作成したプロジェクトフォルダーを開く。
- プロジェクト名.xcodeprojファイルをクリックして、XCodeを起動する。
- 作成したプロジェクトを起動し、srcを見てみる。
- ofApp.cppのメソッドの中身が空っぽ。
- ここにプログラムを書いていく。
[編集] oFクラスの作成
[編集] XCode
- 新しくクラスを作るには、「Fileメニュー > New > File」 を開く。
- 「macOS」タブの「Source」から、「C++ File」を選び、「Next」ボタンを押す。
- Nameにはクラス名を入れます。その際、「Also create a header file」のチェックを入れておきます。そして「Next」ボタンを押します。
- 名前を それぞれXxx.cpp,Xxx.hとし、場所はともに ..\src とする。
- srcの中にXxx.cpp と Xxx.h が新規作成される。
[編集] Visual Studio
- 新しくクラスを作るには、「プロジェクト > 新しい項目の追加...」 を開き,「C++ファイル」と「ヘッダーファイル」を一つずつ作る。
- 名前を それぞれXxx.cpp,Xxx.hとし、場所はともに ..\src とする
- (注)「クラスの追加」や「クラスウィザード」は使えない。
- マウスカーソルをソリューションエクスプローラー上のsrcに置き、ハイライトさせる。
- ソリューションエクスプローラー上のsrcの中にXxx.cpp と Xxx.h が新規作成される。
ヘッダファイル Xxx.h は,
#pragma once #include "ofMain.h" class Xxx { private: ofPoint pos; float radius; public: Xxx(); void hogehoge(); };
などと、記述する。
- ofMain.h をインクルードし、クラスの定義の最後にセミコロンがつくことに注意する。
- #pragma once は,このヘッダファイルを複数回読み込まないようにするためのもの。
- 括弧で囲まれた部分 {...} には,変数の宣言やメソッド(関数)の宣言を書く
- private: に続く部分には,クラス内部のみで利用する変数、メソッドを宣言する。
- public: に続く部分には,クラス外部からアクセスできる変数、メソッドを宣言する。
- Xxx(): はコンストラクターといい、クラスと同じ名前のメソッドである。クラスのインスタンスを生成するときの初期化処理などを記述する。
C++ファイル Xxx.cpp は,
#include "Xxx.h" // クラスのヘッダーを読み込む Xxx::Xxx(){ pos = ofPoint(ofGetWidth()/2, ofGetHeight()/2); radius = 100.0; } void Xxx::hogehoge(){ ofSetColor(31, 63, 255, 100); ofCircle(pos.x, pos.y, radius); ofSetColor(255, 0, 0, 200); ofCircle(pos.x, pos.y, radius); }
などと、メソッドの本体を記述する。
- メソッドの定義の最後にセミコロンがつかないことに注意する。
もとのcppファイルodApp.cppのヘッダーファイルofApp.hに、Xxx.hをincludeする。
例えば、ofApp.hは、以下のとおり。
#pragma once #include "ofMain.h" #include "Ball.h" class ofApp : public ofBaseApp{ public: bool mouse_pressed; public: void setup(); void update(); void draw(); void keyPressed(int key); void keyReleased(int key); void mouseMoved(int x, int y ); void mouseDragged(int x, int y, int button); void mousePressed(int x, int y, int button); void mouseReleased(int x, int y, int button); void windowResized(int w, int h); void dragEvent(ofDragInfo dragInfo); void gotMessage(ofMessage msg); Xxx myCbj; };
publicの領域にXxxクラスのインスタンスmyObjを宣言している。
[編集] 1つのボールがふらふら動く
[編集] 配列とマウスインタラクション
[編集] クラスの使用
[編集] ランダムウォーク
[編集] 1次元セルオートマトン
[編集] ライフゲーム
[編集] Langton's Ant
[編集] Boid
[編集] 物理エンジン Box2D
[編集] 自己相似形
[編集] Tips
- パーティクルの位置に画像を置く
ofApp.h
ofImage particleImage;
ofApp.cpp
setup(){ particleImage.loadImage("particle.png"); } draw(){ particleImage.draw(pos.x, pos.y, w, h); }
- パーティクルの位置を辿る直線を描く
ofApp.cpp
ofBeginShape(); for(int i = 0; i < particle.size(); i++){ ofVertex(pos[i].x, pos[i].y); } ofEndShape();
- パーティクルの位置を辿る曲線を描く
ofApp.cpp
ofBeginShape(); for(int i = 0; i < particle.size(); i++){ ofCurveVertex(pos[i].x, pos[i].y); } ofEndShape();
[編集] フラクタル
[編集] 脳
[編集] Neural Networks
- 神経回路モデル(PPT)
- 神経細胞の写真,構成図[ 1 | 2 | 3 ]
- ニューラルネットワーク入門
- Perceptron,
- Back Propagation
- Hopfield Network
- 自己組織化ネットワーク
- 脳の潜在能力
- 天文学者カール・セーガン「人間の脳はおよそ2,000万冊,すなわち世界最大の図書館に収められているのと同じ数の本を満たすほどの情報を収納することができる」
- 神経科学者「人は平均寿命の間に脳の潜在能力の0.01%(0.0001)しか使っていない」
[編集] Genetic Algorithm
- カール・セーガン「コスモス」エピソードII第3話「平家物語と蟹のなぞ」
- 瀬戸内海の蟹の甲羅は武士の顔に似ているのはなぜか?
- geno typeとpheno type
- GAの概念と応用例
[編集] 参考
[編集] 小テスト
- 場所 いつものPC演習室
- 出題 配布資料などから出題されます。ノート,配布資料などを復習しておいてください。問題の形式は,選択式です。
- 注意事項
- 座席は自由ですが,隣の座席を1つ空けて座ってください。
- 持ち込みは不可です。机の上には一切,何も置かないで下さい。
- PC上のソフトはブラウザだけ起動してください。他のアプリケーションはすべて終了させてください。
[編集] Github
共同開発するときに便利。
学内のプロキシー環境で作業する場合、コンソールで
git config --global http.proxy proxy-n.t-kougei.ac.jp:8080 git config --global https.proxy proxy-n.t-kougei.ac.jp:8080
とする。
通常のプロキシーのない環境で作業する場合、コンソールで
git config --global --unset http.proxy proxy-n.t-kougei.ac.jp:8080 git config --global --unset https.proxy proxy-n.t-kougei.ac.jp:8080
とする。
現在の設定を確認するには、コンソールで、
git config --list
とする。
[編集] リンク
素数のグラフィック http://www.datapointed.net/visualizations/math/factorization/animated-diagrams/?infinity
Generative Gestaltung http://www.generative-gestaltung.de/code