ジェネラティブアート論

提供:kuhalaboWiki
(版間での差分)
移動: 案内, 検索
(予定)
(概要)
 
(1人の利用者による、間の41版が非表示)
1行: 1行:
 
== 概要 ==
 
== 概要 ==
 
;前提スキル
 
;前提スキル
一年生の時にメディアプログラミング演習Iを履修したのと同等のプログラミングスキルがあるものとして、授業を進めます。
+
メディアプログラミング演習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(火) Boid(講義・実習)
+
# 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課題「ランダムウォークのプログラム」
+
* 第1課題 2章までの練習プログラム
** 提出締切日 11/13(月) 
+
** 提出締切日 10/17 
 
* 第2課題「セルオートマトン、フラクタルのプログラム」
 
* 第2課題「セルオートマトン、フラクタルのプログラム」
** 提出締切日 1/13() 
+
** 提出締切日 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マップ [http://www.ncbi.nlm.nih.gov/mapview/ NCBI Map Viewer]
+
* ゲノムの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.kuhalabo.net/~kuha/tutorial0/bioart/cagallary/ セルオートマトン・ギャラリー] /
+
*[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 Visual C++プログラミング ==
+
== openFrameworks プログラミング ==
  
 
;イントロダクション
 
;イントロダクション
199行: 252行:
 
** http://openframeworks.cc/documentation/
 
** http://openframeworks.cc/documentation/
 
** http://yoppa.org/blog/4299.html
 
** http://yoppa.org/blog/4299.html
 
; 0.9での変更点
 
: https://qiita.com/2bbb/items/13f2e20760ec61e3ec89
 
: 教科書のソースプログラムは、0.8ベースなので、上記の変更に注意すること。
 
: 特に、描画系のコマンドが、ofDrawXXX()に変更になっています。例えば、以下の通り。
 
:* ofLine -> ofDrawLine
 
:* ofRect -> ofDrawRectangle
 
:* ofCircle -> ofDrawCircle
 
  
 
; 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>
  
== フラクタル ==
+
== [[フラクタル]] ==
古代ギリシャからあるユークリッド幾何学と20世紀のフラクタル幾何学の比較
+
  
;考察
+
== [[]] ==
:古代エジプト人は3:4:5の辺を持つ三角形で直角が得られることを知っていた.ピラミッドなどの巨大建造物.
+
:三平方の定理を発見したピタゴラスはどこがすごいか?
+
 
+
;フラクタル図形
+
[http://www.kuhalabo.net/~kuha/tutorial0/bioart/Fractex.exe フラクタル図形の例]
+
 
+
[http://www.gaia.h.kyoto-u.ac.jp/~fractal/ フラクタル日除け]
+
 
+
== 脳 ==
+
;脳波,脳電図(electroencephalogram EEG)
+
:大脳皮質のニューロンの膨大な数のシナプス結合における電位(シナプス後電位)の集合と考えられている。
+
:通常は,空間的および時間的分散性のために一定の形状の波形にはならない。しかし,大脳皮質の活性度が低下した時にはある程度の同期性がみられ,その代表的な状態が睡眠時の脳波である。
+
:開眼時,脳の神経細胞があちこちで活発に作動していると,シナプス電位は同期が取れずに,脳波はランダムなになり,特定の周波数は測定されない。
+
*デルタ波(δ波):1~3Hz ぐっすり睡眠.昏睡.
+
*シータ波(θ波):4~7Hz うたたうね.ぼんやり.
+
*アルファ波(α波):8~13Hz 覚醒,安静,閉眼時。リラックス。
+
*ベータ波(β波):14~30Hz 開眼時,五感が働いている状態。活発な思考。
+
*ガンマ波(γ波):30~64Hz 高次精神活動に関連(?)
+
*オメガ波(ω波):64~128Hz(?)
+
*ロー波(ρ波):128-512Hz (?)
+
*シグマ波(σ波):512-1024Hz (?)
+
*アーティファクト:ノイズ(雑音)。まばたき,眼球運動,電極の接着不良など脳と無関係のものが要因。
+
 
+
バイノーラルビート
+
 
+
周波数追従反応
+
 
+
脳磁図,生物フォトン,心電図,筋電図,眼電図。
+
 
+
[http://www.aist.go.jp/aist_j/press_release/pr2010/pr20100329/pr20100329.html ニューロコミュニケーター]
+
 
+
*[http://www.brl.ntt.co.jp/IllusionForum/ イリュージュン・フォーラム]
+
**[http://www.kuhalabo.net/~kuha/easy_bbs4klb2.php 簡単BBS]に聞こえ方を書いてみよう。
+
 
+
[http://www.mindball.se/ Mindball]
+
  
 
== 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/pmoss/ ペパードモス・ゲーム]
+
**[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/Leaf.exe GA for 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++のプログラミングを使用して、実際に作成してみる。

本講義の目標は以下の通り。

  1. 生物の特徴と生物的なシステムについて理解する。
  2. 複雑系システムについて理解し、応用例を作成できる。
  3. openFrameworksを使って作品のプログラミングができる。

[編集] 開発環境

開発環境としてopenFrameworks for Visual studioを使用します。

テキストや開発環境については、以下を参照してください。

ドキュメント http://openframeworks.jp/tutorials/

[編集] 予定

2018年度
  1. 9/18(火) ガイダンス, 生物と情報とアート,openFrameworksプログラミング演習
  2. 9/25(火) 幾何学図形の描画(実習)
    • 教科書 1章 読み物として読む。
    • 教科書 2章 実際にプログラムを作ってみる。
    •  2-4「数値の記憶と計算」までをやり終えて、自作プログラムexeファイルを提出。
    • 幾何学図形の描画、色の設定、変数
    •  exeファイルは、プロジェクトフォルダーのbinフォルダーの中にあります。
  3. 10/2(火) 幾何学図形の描画(実習)
    •  2-8「条件分岐」までを学習し、自作プログラムexeファイルを提出。
    • 繰り返し、配列、図形の移動、条件分岐
    • 提出場所 PC > Weekly(W:) > art > int > kuhara20181002
      • ファイル名 番号_名前のローマ字 例 1724000_suzukiichiro.exe
  4. 10/9(火) (実習)
    •  2-11「より高度な表現」までを学習し、自作プログラムexeファイルを提出。
    • マウスアクション、摩擦、重力、奇跡のフェード
    • この日の授業までに2章を終えてください。2章までに学んで、制作したプログラムを提出してもらいます。
  5. 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を参照。
  6. 10/23(火) クラスオブジェクトの使用、ランダムウォーク(講義・実習)
  7. 10/30(火)1次元セルオートマトン(講義・実習)
  8. 11/6(火) ライフゲーム(講義・実習)
  9. 11/13(火) ラングトンのアリ(講義・実習)
    • 11/20(火) 金曜振替授業日
  10. 11/27(火) Boid(講義・実習)
  11. 12/4(火) 物理エンジン Box2D(講義・実習)
  12. 12/11(火)フラクタルと自己相似形と再帰呼び出し(講義・実習)
  13. 12/18(火) ニューラルネットワーク、遺伝的アルゴリズム(講義)
  14. 1/8(火) 小テスト
    • 授業で扱った内容すべてが含まれます。
  15. 1/15(火) 予備(出席は取りません)
  • 第1課題 2章までの練習プログラム
    • 提出締切日 10/16
  • 第2課題「創発ジェネラティブアートのプログラム」
    • 提出締切日 1/7(月) 
    • 「ライフゲーム、Boid、アリ、Box2D、フラクタル」の中から、1つ以上を選び、自分のオリジナリティを加えたプログラムを提出してください。
    • ソースプログラムも採点の対象としますので、プロジェクトのフォルダー全体をzip圧縮して、提出して下さい。
2017年度
  1. 9/19(火) ガイダンス, 生物と情報とアート,openFrameworksプログラミング演習
  2. 9/26(火) openFrameworks C++プログラミング(実習)
    • 教科書 1章 読み物として読む。
    • 教科書 2章 実際にプログラムを作ってみる。
    •  2-4「数値の記憶と計算」までをやり終えて、自作プログラムexeファイルを提出。
    • 幾何学図形の描画、色の設定、変数
    •  exeファイルは、プロジェクトフォルダーのbinフォルダーの中にあります。
  3. 10/3(火) 幾何学図形の描画(実習)
    •  2-8「条件分岐」までを学習し、自作プログラムexeファイルを提出。
    • 繰り返し、配列、図形の移動、条件分岐
  4. 10/17(火) (実習)
    •  2-11「より高度な表現」までを学習し、自作プログラムexeファイルを提出。
    • マウスアクション、摩擦、重力、奇跡のフェード
    • この日の授業までに2章を終えてください。2章までに学んで、制作したプログラムを提出してもらいます。
  5. 10/24(火) (実習)
    •  3-1、2,3を学習する。
      • 3-2に関して、余裕がない場合、3-2-7「画像ファイルを扱う」だけでもよい。
    •  3-4「アドオンの利用」以降は学習しなくてもよい。関心に応じて学習してください。
    • 3-3-2「新規クラスの生成」は、openFrameworks for Visual studioを参照。
  6. 10/31(火) クラスオブジェクトの使用、ランダムウォーク(講義・実習)
  7. 11/7(火) セルオートマトン(講義・実習)
  8. 11/14(火) ライフゲーム(講義・実習)
  9. 11/21(火) ラングトンのアリ(講義・実習)
  10. 11/28(火) Boid(講義・実習)
  11. 12/5(火) 物理エンジン Box2D(講義・実習)
  12. 12/12(火)フラクタルと自己相似形と再帰呼び出し(講義・実習)
  13. 12/19(火) ニューラルネットワーク、遺伝的アルゴリズム(講義)
  14. 1/9(火) 小テスト
    • 授業で扱った内容すべてが含まれます。
  15. 1/16(火) 予備(出席は取りません)
  • 第1課題 2章までの練習プログラム
    • 提出締切日 10/17 
  • 第2課題「セルオートマトン、フラクタルのプログラム」
    • 提出締切日 1/8(月) 
    • 「ライフゲーム、Boid、アリ、Box2D、フラクタル」の中から、1つ以上を選び、自分のオリジナリティを加えたプログラムを提出してください。
    • ソースプログラムも採点の対象としますので、プロジェクトのフォルダー全体をzip圧縮して、提出して下さい。
2016年度
  1. 9/20(火) ガイダンス, 生物と情報とアート,openFrameworksプログラミング演習
  2. 9/27(火) openFrameworks C++プログラミング
    • 教科書 1章 読み物として読む。
    • 教科書 2章 実際にプログラムを作ってみる。
    •  2-4「数値の記憶と計算」までをやり終えて、自作プログラムexeファイルを提出。
    • 幾何学図形の描画、色の設定、変数
    •  exeファイルは、プロジェクトフォルダーのbinフォルダーの中にあります。
  3. 10/4(火) 幾何学図形の描画
    •  2-8「条件分岐」までを学習し、自作プログラムexeファイルを提出。
    • 繰り返し、配列、図形の移動、条件分岐
  4. 10/18(火)
    •  2-11「より高度な表現」までを学習し、自作プログラムexeファイルを提出。
    • マウスアクション、摩擦、重力、奇跡のフェード
  5. 10/25(火)
    •  3-1、2,3を学習する。
      • 3-2に関して、余裕がない場合、3-2-7「画像ファイルを扱う」だけでもよい。
    •  3-4「アドオンの利用」以降は学習しなくてもよい。関心に応じて学習してください。
    • 3-3-2「新規クラスの生成」は、openFrameworks for Visual studioを参照。
  6. 11/1(火) セルオートマトン
  7. 11/8(火) ランダムウォーク
  8. 11/15(火) ライフゲーム
  9. 11/22(火) Boid
  10. 11/29(火) ラングトンのアリ
  11. 12/6(火) 物理エンジン Box2D
  12. 12/13(火)フラクタルと自己相似形と再帰呼び出し
  13. 12/20(火) ニューラルネットワーク、遺伝的アルゴリズム
  14. 1/17(火) 小テスト
    • 授業で扱った内容すべてが含まれます。
  15. 1/24(火) 予備
  • 第1課題「ランダムウォークのプログラム」
    • 提出締切日 11/14(月) 
  • 第2課題「セルオートマトン、フラクタルのプログラム」
    • 提出締切日 1/13(金) 
    • 「ライフゲーム、Boid、アリ、Box2D、フラクタル」の中から、最低2つのプログラムを提出してください。
    • 3つ以上提出してもかまいません。その場合、上位2つの課題を点数として扱います。
    • ソースプログラムも採点の対象としますので、プロジェクトのフォルダー全体をzip圧縮して、提出して下さい。
2015年度
  1. 9/29(火) ガイダンス, 生物と情報とアート,openFrameworksプログラミング演習
  2. 10/6(火) openFrameworks C++プログラミング
  3. 10/13(火) 幾何学図形の描画
  4. 10/20(火) ランダムウォーク
  5. 10/27(火) セルオートマトン
  6. 11/10(火) ライフゲーム
  7. 11/17(火) ラングトンのアリ
  8. 12/1(火) アトラクティブフォース
  9. 12/8(火) レイノルズボイド
  10. 12/15(火) 物理エンジン Box2D
  11. 12/22(火) フラクタルと再帰呼び出し
  12. 1/5(火) 自己相似形と再帰呼び出し
  13. 1/12(火) ニューラルネットワーク
  14. 1/19(火) 遺伝的アルゴリズム
  15. 1/26(火) 小テスト
  • 1/29(金) 第1課題、第2課題の提出締切日

[編集] 生物と情報とアート

http://abandonedart.org/

[編集] メモ 

Visual Studioのショートカット

  • Ctrl-K Ctrl-C コメントアウト
  • Ctrl-K Ctrl-U コメントアウト解除
  • Ctrl-K Ctrl-F インデントをそろえる

クリエイティブ・コーダー

[編集] 複雑系

[編集] セルオートマトン

[編集] ライフゲーム

セルオートマトン音楽

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新規プロジェクトの作成

  1. oFフォルイダー内のprojectGeneratorフォルダー内のprojectGeneratorを実行する。
  2. Project Path:にoFのあるフォルダーを指定する。
  3. Project Name:に、プロジェクトの名前を入れる。
  4. Addons:に、使用する追加機能(アドオン)を入れる。通常は、なしでよい。
  5. Generateをクリックする。
  6. Apps内のMyAppsにマイプロジェクトが作成されている。
  7. Open IDEをクリックした場合
    • XCodeが立ち上がることを確認する。
  8. Closeをクリックした場合
    • Apps内のMyAppsに作成したプロジェクトフォルダーを開く。
    • プロジェクト名.xcodeprojファイルをクリックして、XCodeを起動する。
  9. 作成したプロジェクトを起動し、srcを見てみる。
    • ofApp.cppのメソッドの中身が空っぽ。
    • ここにプログラムを書いていく。

[編集] oFクラスの作成

[編集] XCode

  1. 新しくクラスを作るには、「Fileメニュー > New > File」 を開く。
  2. 「macOS」タブの「Source」から、「C++ File」を選び、「Next」ボタンを押す。
  3. Nameにはクラス名を入れます。その際、「Also create a header file」のチェックを入れておきます。そして「Next」ボタンを押します。
    • 名前を それぞれXxx.cppXxx.hとし、場所はともに ..\src とする。
  4. srcの中にXxx.cppXxx.h が新規作成される。

[編集] Visual Studio

  1. 新しくクラスを作るには、「プロジェクト > 新しい項目の追加...」 を開き,「C++ファイル」「ヘッダーファイル」を一つずつ作る。
    • 名前を それぞれXxx.cppXxx.hとし、場所はともに ..\src とする
    • (注)「クラスの追加」や「クラスウィザード」は使えない。
  2. マウスカーソルをソリューションエクスプローラー上のsrcに置き、ハイライトさせる。
  3. ソリューションエクスプローラー上のsrcの中にXxx.cppXxx.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話「平家物語と蟹のなぞ」
    • 瀬戸内海の蟹の甲羅は武士の顔に似ているのはなぜか?

配布資料PDF

[編集] 参考

[編集] 小テスト

  • 場所 いつもの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://gushwell.ifdef.jp/

素数のグラフィック http://www.datapointed.net/visualizations/math/factorization/animated-diagrams/?infinity

Generative Gestaltung http://www.generative-gestaltung.de/code

個人用ツール
名前空間

変種
操作
案内
ツールボックス