スケーラブルアート論
提供:kuhalaboWiki
(版間での差分)
(→予定) |
(→新規プロジェクトの作成) |
||
63行: | 63行: | ||
#* ofApp.cppのメソッドの中身が空っぽ。 | #* ofApp.cppのメソッドの中身が空っぽ。 | ||
#* ここにプログラムを書いていく。 | #* ここにプログラムを書いていく。 | ||
+ | |||
+ | == クラスの作成 == | ||
+ | |||
+ | # 新しくクラスを作るには、'''「プロジェクト > 新しい項目の追加...」''' を開き,'''「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'''を宣言している。 | ||
== 予定 == | == 予定 == |
2019年9月26日 (木) 08:25時点における版
目次 |
概要
- 前提スキル
一年生の時にメディアプログラミング演習Iを履修したのと同等のプログラミングスキルがあるものとして、授業を進めます。 もし、プログラミングに不安があるなら、上記テキストを使って、自分で予習や自習をしてください。 openFrameworksはProcessingと似ているため、Processingを知っていると、理解が早いです。
- 成績評価
- 出席:学生証scan+Minutes paper
- 課題:セルオートマトン課題、再帰呼び出し図形課題、複素平面フラクタル課題
- 小テスト:ハイスコア
- 授業概要及び到達目標
- インタラクティブアートは芸術を基盤として科学や工学を統合する新しい領域である。生物科学に関連した分野として、人工生命、ライフゲーム、フラクタル、オートマトン、遺伝的アルゴリズム、ニューラルネットワークなど応用範囲の広いものが数多く存在する。
そういった生物に見られる特徴をアートに応用したジェネラティブアートの作品をC++のプログラミングを使用して、実際に作成してみる。
本講義の目標は以下の通り。
- 生物の特徴と生物的なシステムについて理解する。
- 複雑系システムについて理解し、応用例を作成できる。
- openFrameworksを使って作品のプログラミングができる。
開発環境
開発環境としてMacOS XCodeを使用します。
テキストや開発環境については、以下を参照してください。
- openframeworks https://openframeworks.cc/ja/
- http://www.kuhalabo.net/kxoops/modules/d3blog/details.php?bid=141
資料
- Generative Art with Math https://www.openprocessing.org/user/57914
- oF 0.9.x 1からの変更点 https://qiita.com/2bbb/items/13f2e20760ec61e3ec89
- 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フォルイダー内のprojectGeneratorフォルダー内のprojectGeneratorを実行する。
- Project Path:にoFのあるフォルダーを指定する。
- Project Name:に、プロジェクトの名前を入れる。
- Addons:に、使用する追加機能(アドオン)を入れる。通常は、なしでよい。
- Generateをクリックする。
- Apps内のMyAppsにマイプロジェクトが作成されている。
- Open IDEをクリックした場合
- XCodeが立ち上がることを確認する。
- Closeをクリックした場合
- Apps内のMyAppsに作成したプロジェクトフォルダーを開く。
- プロジェクト名.xprojectファイルをクリックして、XCodeを起動する。
- 作成したプロジェクトを起動し、srcを見てみる。
- ofApp.cppのメソッドの中身が空っぽ。
- ここにプログラムを書いていく。
クラスの作成
- 新しくクラスを作るには、「プロジェクト > 新しい項目の追加...」 を開き,「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を宣言している。
予定
- 2019年度
- 9/20(金) ガイダンス, 生物と情報とアート,openFrameworksプログラミング演習
- 9/27(金) 幾何学図形の描画(実習)
- 教科書 1章 読み物として読む。
- 教科書 2章 実際にプログラムを作ってみる。
- 新規プロジェクトの作成は、openFrameworks for Visual studioを参照
- 2-4「数値の記憶と計算」までをやり終えて、自作プログラムの実行ファイルを提出。
- 幾何学図形の描画、色の設定、変数
- exeファイルは、プロジェクトフォルダーのbinフォルダーの中にあります。
- ファイル名 番号_名前のローマ字 例 1724000_suzukiichiro
- 10/4(金) 幾何学図形の描画(実習)
- 2-8「条件分岐」までを学習し、自作プログラム実行ファイルを提出。
- 繰り返し、配列、図形の移動、条件分岐
- 10/11(金) (実習)
- 2-11「より高度な表現」までを学習し、自作プログラムの実行ファイルを提出。
- マウスアクション、摩擦、重力、奇跡のフェード
- この日の授業までに2章を終えてください。2章までに学んで、制作したプログラムを提出してもらいます。
- 10/18(金) (実習)
- 3-1,2,3を学習する。
- 3-1 は、読んで理解してください。プログラム例は作らなくてもよいです。
- 3-2 は、3-2-7「画像ファイルを扱う」だけでもよい。余裕がれば、他の単元を勉強してもよいです。、
- 3-3 は、実際に新たにクラスを作成し、プログラムを作りながら、学習を進めてください。
- 3-4「アドオンの利用」以降は学習しなくてもよい。関心に応じて学習してください。
- 3-3-2「新規クラスの生成」は、openFrameworks for Visual studioを参照。
- 3-1,2,3を学習する。
- 10/25(金) クラスオブジェクトの使用、ランダムウォーク(講義・実習)
- 11/8(金)1次元セルオートマトン(講義・実習)
- 11/15(金) ライフゲーム(講義・実習)
- 11/22(金) ラングトンのアリ(講義・実習)
- 11/29(金) Boid(講義・実習)
- 11/27(金) 物理エンジン Box2D(講義・実習)
- 12/6(金)フラクタルと自己相似形と再帰呼び出し(講義・実習)
- 12/13(金) ニューラルネットワーク、遺伝的アルゴリズム(講義)
- 12/20(金) 小テスト
- 授業で扱った内容すべてが含まれます。
- 1/10(金) 予備日(出席は取りません)
- 第1課題 2章までの練習プログラム
- 提出締切日 10/16
- 第2課題「創発ジェネラティブアートのプログラム」
- 提出締切日 1/7(月)
- 「ライフゲーム、Boid、アリ、Box2D、フラクタル」の中から、1つ以上を選び、自分のオリジナリティを加えたプログラムを提出してください。
- ソースプログラムも採点の対象としますので、プロジェクトのフォルダー全体をzip圧縮して、提出して下さい。
- Contents
- Scalable art, Generative art, Mathematical art, Artificial Intelligence, Artificial Life, Complext sysytem
- openFrameworks C++ / Xcode MacOSX
- Logic circuit
- 完全情報ゲーム:チェッカー、オセロ、チェス、将棋、囲碁
- Cell auttomaton
- Conway's game of life
- Wire world
- Random walk
- Langton's ant
- Boid
- Box2D
- Fractal, Self-similar
- Recursive call
- Complex square
- Mandelbrot
- Neural network
- Genetic algorithm
- Code, Chyper, Encript
- Space X
- Robotics
- Expert system
- Fourier transform, spectrum
- Fibonacci number
- Belousov-Zhabotinsky reaction
- Gray-Scott model
- Turing pattern
生物と情報とアート
- 生物とは? 生物の特徴とは?
- 例:小石と貝殻
- 「生物と無生物の違いは何か?」説明してみよう。
- ゲノムのDNAマップ NCBI Genome Map Viewer
- ヒト一人を再生するのに必要な情報量は?