百鬼夜行

素性を知られぬままエンジニアになることを目指します

「ジェネラティブ・アート Processingによる実践ガイド」を読んで(Part 2 後半)

f:id:yagyosan:20180521001140p:plain

仕事を家で片付けねばならず少し遅れた...。 前回はこちら。今日はchapter5だけ。

yagyosan.hatenablog.com

引き続き、パーリンノイズを使ったサンプルを作るが、後半では3次元を扱い始める。 translateと、pushMatrixpopMatrixも新たに出てきている。〜Matrixの仕組みを理解するには、もう少し自分で簡単なサンプルを作ってみたほうがよさそうだ。あとはパーリンノイズの活用が、1次元から2次元、3次元に変わったことにも注目。 パーリンノイズを使うときは、シード値を(1)ひとつめの値はランダムにすること(2)増減幅は0.1以下に収めることに気をつける。

3次元の話では、レンダラーの種類の説明から入り、球体や立方体を描けるようになった。 基本的には2次元での描画の延長なので、大きく困ったことはなかったが、全体的にコードが長くなって把握するのに時間がかかってくるようになり、細部についてわからないところがちらほら出てきた。最後にメモしておく。 rotate関数や、その中にframeCountを入れて使う方法なども覚えておく。

以下、わかんなかったこと。

  • 2次元のノイズ(=引数を2つ取るnoise関数)と1次元のノイズ関数は、どう違うのか?もう少し細かく。
  • Processing 3 だとOPENGLの箇所で the field PConstants.OPENGL is deprecated と表示されるのはなぜ?

「ジェネラティブ・アート Processingによる実践ガイド」を読んで(Part 2 前半)

f:id:yagyosan:20180514235446p:plain

Part 2の途中まで読んだ(Chapter 3, 4)。 次から3Dなのでその前に軽くまとめておく。

Chapter 3では、線をランダムに引くための方法が紹介されていた。 random関数とnoise関数でそれぞれ特性が異なるところがポイントだ。 というかどういう風に違うんだ...と思ったので調べたりした。ある程度の連続性があるのがパーリンノイズなのね。 またランダムにする値の上限値と下限値の設定の仕方がぼんやりとわかった。三角関数がようやっと出てきた。 ここら辺の知識は他でもいっぱい使いそう。

Chapter 4 では、円を描く方法についての話。 線と違って、2点間を結べばいいわけではなく、半径や円周、角度も盛り込まれる。 角度を扱うための radian 関数と degree 関数があるが、今回はラジアンだけ使った。 1ラジアン = 180 / PI、2πラジアンで360°になることも覚えておく。 また図形を描くためのshapeとvertexが出てきた。ちょっと苦手な領域に入ってきた。

以下参考になったリンク

Proce55ing.walker,blog » Blog Archive » パーリンノイズで模様作り

Functions for drawing

「ジェネラティブ・アート Processingによる実践ガイド」を読んで(Part 1)

f:id:yagyosan:20180508222726p:plain

Part1を読んだ。

Chapter 1に関しては、前回と同じくジェネラティブ・アートとはなんぞやを解説している。 ジェネラティブ・アートたらしめる要素としては、アルゴリズム/自律性/秩序とカオス/斬新性あたりがある。 僕が以前メディアアートを学んでいた時は、アルゴリズムでかなり引っかかった覚えがあり、 この本を選んだのも、メディアアートにおいてどんなアルゴリズムが使われるのかが知りたかったという理由がある。 ともかく、 ここは概論といったところでした。

Chapter 2は、基本的なProcessingの使い方だったので、スッと飛ばし気味で読みました。 コード書いてみたら、意外と結構思い出せててびっくりした。 ただ中には、基本的なフレームレートの値や、グローバル変数はアンスコつけような!みたいな 実践的な知識が書いてあって、そこはふむふむと読んでいた。

次のパートから、ランダム性のある、いかにもカオスな部分に入っていくので楽しみ。

前回の記事はこちら。

yagyosan.hatenablog.com

「ジェネラティブ・アート Processingによる実践ガイド」を読んで(イントロダクション)

趣味としてクリエイティブコーディングをやりたいと思い、まずは買って読んでみた。 この記事ではイントロダクションの感想について述べたい。

イントロダクションでは、「ジェネラティブ・アート」というものをいろんな言葉で語っている。 単純に訳すと、生成的な芸術と訳せるかもしれないが、この「生成的な」に多くの意味が詰まっている。

f:id:yagyosan:20180506193339p:plain

僕が個人的に気に入っている表現としては、「有機的」と「機械的」という対比があることだ。 ジェネラティブ・アートは、自然物が成長するように、自己生成的に自らを作り上げて行く。 その指向性はカオスではあるが、しかし結果として全体として調和が取れるようになっている。 このような意味で「有機的」という言葉が使われているようだ。 反対に機械的(もしくは人工物的?)なモノは、秩序や規則の中でのみ構築される。

そしてジェネラティブ・アートは、プログラミング言語という機械的な手段を用いて、有機的なアウトプットをした芸術なのだと、僕は解釈している。おそらくこれは狭義の解釈だと思うが、読み進めるごとに何度も読み返して、より理解を深めたい。

[普及版]ジェネラティブ・アート―Processingによる実践ガイド

[普及版]ジェネラティブ・アート―Processingによる実践ガイド

Udacity: Introduction to Computer Science Lesson 5 の途中までやった(関数編)

関数や制御などに突入

関数について

  • 全部のリンクを見つけるWebクローラを見つけるためのコードを書く
  • その際に必要なのが関数と制御
    • 関数: Procedures
    • 制御: Control
  • 配列の:は最初からと最後まで
  • なぜコードをまとめるのか?
    • 関数を抽象化する
    • 何度も繰り返すことを避けられる
  • 関数は入力を使って行うもの
  • 結果として出力を作り出すものは複数あることもある
  • 組み込み演算子も関数のように動くが、構文が違う
    • ただし抽象的に作用するものとしては同じ概念になる

Pythonが提供する関数の構造体について

def <name>(<parameters input>):
    <block>

構造体について詳しく

  • Inputsはコンマで区切られた名前のリスト
  • 入力がない場合は何もないかっこになる
  • Blockは関数の主要部分となる実行したいコードの一連の文
  • 通常4つのインデントする
  • インタプリタはインデントじゃないところを把握する

関数を作る際のポイント

  • 結果で行いたいこと(Print)は関数の中に入れない
  • 出力したい値は、returnを使って値を戻してあげる
Return <expression>, ...
  • 出力を何も返さなければ、returnの後に何も書かない
  • 副作用 = 出力ではなく関数内の実行結果をprintで見ることができる

関数の使い方

<procedure> (<input>, <input>,,...)
  • 左から関数名、入力リスト
    • 入力リストは関数が要求する入力数と同じにしないといけない
    • operands, argument という引数
    • これまでにも同じようなものと触れてきた
ex. find('au', 3)

しかしfindには別の入力がある

page.find('au', 3)
  • .の前にある「Page」は関数を呼び出すこととよく似ているが後でやる
  • 自身で定義した関数では関数を呼び出すための手前のオブジェクトはいらない
print rest_of_string('audacity')

こうすると表示される。

中身の話

  • 関数を呼び出すと関数の主要部分を直接実行できる
  • インタプリタが何を行なっているのかを判断できる
  • 関数を呼び出すと関数内でコードを直接実行する
  • パラメータに入力として渡した値を代入する
  • returnは「ジャンプ」する
    • 関数を呼び出した場所へ一気に戻る
    • ジャンプした際に評価したも値が返した値になる
  • 入力を出力と関連づけよう
  • 値がないことを示すために特別な値Noneが使われる
  • 関数の合成 = procedure(procedure())

nodebrew install で Failed to create the file と怒られたときの解決法

nodebrew install 時に Failed to create the file と怒られた。

% nodebrew install-binary v7.9.0
Fetching: https://nodejs.org/dist/v7.9.0/node-v7.9.0-darwin-x64.tar.gz
Warning: Failed to create the file 
Warning: /Users/yagyosan/.nodebrew/src/v7.9.0/node-v7.9.0-darwin-x64.tar.gz: 
Warning: No such file or directory
                                                                           0.0%
curl: (23) Failed writing body (0 != 941)
download failed: https://nodejs.org/dist/v7.9.0/node-v7.9.0-darwin-x64.tar.gz

ディレクトリがないとのことなので作ってあげたら通った。

% mkdir ~/.nodebrew             
% mkdir ~/.nodebrew/src
% nodebrew install-binary v7.9.0
Fetching: https://nodejs.org/dist/v7.9.0/node-v7.9.0-darwin-x64.tar.gz
######################################################################## 100.0%
Installed successfully

Udacity: Introduction to Computer Science Lesson 4 をやり終えた

  • pythonはスペースが重要
    • 新しい行やインデントや始まりや終わりを示す
  • バッカス・ナウア記法は数式をどのように作成できるか確認する言語を理解するために利用できる
    • またインタプリタで挿入した文字列を分解するために文法も使用する
    • 文法を使ってプログラムの構成要素に変換する
  • プログラムを書いたらインタプリタで実行する
  • インタプリタで組み込まれている文法で文字列を分解する

バッカス・ナウア記法、よくわかってないのう...。