2016年6月18日土曜日

基本はループとランダム要素(2)

繰り返し値を増加させてやるだけで、
それっぽい絵がかけるのが、Processingの魅力ですね。
イラレとかで同じことやれっていわれたら死にます。

import random

size(640, 480, P3D)
colorMode(HSB, 100)
background(99)
smooth()

loopLimit = 100
x = 0
y = 0
rectSize = 100
for i in range(loopLimit):
    x += width/loopLimit
    y += height/loopLimit
    rect(x, y, rectSize, rectSize)


random読みこんどいてつかってませんが。
座標0, 0 から画面横幅、縦幅をループ回数で割ったサイズで座標移動させていって、
繰り返したものですね。

同じことを transrate 関数を書き換えると次のような感じ。

size(640, 480, P3D)
colorMode(HSB, 100)
background(99)
smooth()

loopLimit = 100
marginX = width/loopLimit
marginY = height/loopLimit
rectSize = 100
for i in range(loopLimit):
    rect(0, 0, rectSize, rectSize)
    translate(marginX, marginY)


行数減って(import randomは別として)、
for ループないの処理も減った感じです。

四角形の内部の色をランダム要素で変えてやると下のようになりました。


import random

size(640, 480, P3D)
colorMode(HSB, 100)
background(99)
smooth()
noStroke()

loopLimit = 100
marginX = width / loopLimit
marginY = height / loopLimit
rectSize = 100
for i in range(loopLimit):
    fill(random.randint(0, 99), 99, 99, 40)
    rect(0, 0, rectSize, rectSize)
    translate(marginX, marginY)


気持ち悪いですね。
あれだったので、ループごとに色相を1つ上げていくことにしました。

import random

size(640, 480, P3D)
colorMode(HSB, 100)
background(0)
smooth()
noStroke()

loopLimit = 100
marginX = width / loopLimit
marginY = height / loopLimit
colorIndex = 0
rectSize = 100
for i in range(loopLimit):
    fill(colorIndex, 99, 99, 40)
    rect(0, 0, rectSize, rectSize)
    translate(marginX, marginY)
    colorIndex += 100/loopLimit


気持ち悪くはなくなったけど、面白くはなくなりました。

背景を黒色に。

import random

size(640, 480, P3D)
colorMode(HSB, 100)
background(0)
smooth()
noStroke()

loopLimit = 100
marginX = width / loopLimit
marginY = height / loopLimit
colorIndex = 0
rectSize = 100
for i in range(loopLimit):
    fill(colorIndex, 99, 99, 40)
    rect(0, 0, rectSize, rectSize)
    translate(marginX, marginY)
    colorIndex += 100/loopLimit



こっちの方がなんとなくマシですね。

さて。では四角形のサイズを変えます。

import random

size(640, 480, P3D)
colorMode(HSB, 100)
background(0)
smooth()
noStroke()

loopLimit = 100
marginX = width / loopLimit
marginY = height / loopLimit
colorIndex = 0
rectSize = 100
for i in range(loopLimit):
    fill(colorIndex, 99, 99, 40)
    rect(0, 0, rectSize, rectSize)
    translate(marginX, marginY)
    colorIndex += 100/loopLimit
    rectSize += width/loopLimit


初期サイズがでかすぎたでしょうか。
小さくして、そして試行回数を1万に変えてみる。

import random

size(640, 480, P3D)
colorMax = 100
colorMode(HSB, colorMax)
background(0)
smooth()
noStroke()

loopLimit = 10000
marginX = width*1.0 / loopLimit
marginY = height*1.0 / loopLimit
colorIndex = 0
rectSize = 1
for i in range(loopLimit):
    fill(colorIndex, 99, 99, 40)
    rect(0, 0, rectSize, rectSize)
    translate(marginX, marginY)
    colorIndex += colorMax*1.0/loopLimit
    rectSize += width*1.0/loopLimit


なんとなく綺麗になった感はでました。
(処理が重くなったけど)

途中で大きさを小さくするようにするとこんな感じ。

import random

size(640, 480, P3D)
colorMax = 100
colorMode(HSB, colorMax)
background(0)
smooth()
noStroke()

loopLimit = 10000
marginX = width*1.0 / loopLimit
marginY = height*1.0 / loopLimit
colorIndex = 0
rectSize = 1

for i in range(loopLimit):
    fill(colorIndex, 99, 99, 10)
    rect(0, 0, rectSize, rectSize)
    translate(marginX, marginY)
    colorIndex += colorMax*1.0/loopLimit

    if i < loopLimit/4.0:
        rectSize += width*0.5/loopLimit
    elif i > loopLimit/4*3:
        rectSize -= width*0.5/loopLimit




途中のサイズも変えてやる。ここにランダム要素を含む。

import random

size(640, 480, P3D)
colorMax = 100
colorMode(HSB, colorMax)
background(0)
smooth()
noStroke()

loopLimit = 10000
marginX = width*1.0 / loopLimit
marginY = height*1.0 / loopLimit
colorIndex = 0
rectSize = 1
turnFlag = False
for i in range(loopLimit):
    fill(colorIndex, 99, 99, 10)
    rect(0, 0, rectSize, rectSize)
    translate(marginX, marginY)
    colorIndex += colorMax*1.0/loopLimit

    if i < loopLimit/4.0:
        rectSize += width*0.5/loopLimit
    elif i > loopLimit/4*3:
        rectSize -= width*0.5/loopLimit
    else:
        if (i % 1000) == 0:
            if random.random() > 0.5:
                turnFlag = True
            else:
                turnFlag = False
        if turnFlag == True:
            rectSize += width*0.5/loopLimit
        else:
            rectSize -= width*0.5/loopLimit




draw関数につっこんでやって、描画を繰り返すようにし、
音やなんかの値に合わせてやれば、
面白いパフォーマンスができそう。

基本はループとランダム要素(1)

ループとランダムな値を使ってりゃ、
それっぽくなると思っています。

例えば。


import random

size(640, 480, P3D)
colorMode(HSB, 100)
background(99)
smooth()

for i in range(100):
    x = random.randint(0, width)
    y = random.randint(0, width)
    rectSize = 100
    rect(x, y, rectSize, rectSize)




透明な四角の図形を、100回、適当に配置しただけで、
それっぽいアートになります。
(なったように感じます。)

processing.py

SuperCollider, FAUSTと作っていますが、
せっかくなので並行して Processing 用の Blogger も作ろうと思いました。
コードと実行結果の画像をアップロードしていく予定です。
(そのうち、PureData, MAX/MSP とかもつくるかも・・・)


import random size(2480, 480, P3D) colorMode(HSB, 100) background(0) noStroke() smooth() for i in range(3000):     x = random.randint(0, width)     y = random.randint(0, height)     rectLength = random.randint(0,100)     fill(random.randint(0,100), 99, 99, random.randint(10, 60))     rotate(radians(random.randint( 0, 200)))     rect(x, y, rectLength, rectLength)     if i % 100 == 0:         translate(0, 0)