Mod: Generative Design / P_1_1_1_01
マウスカーソルの位置に合わせてグリッドの細かさが変わりながらHSBの色相を表示するもの.
今回のようにマウスの座標をステップ数使う場合,原点(0,0)の位置にあるときfor文が無限ループしてしまう問題がある.サンプルではstepX = mouseX + 2;
のような感じで解決していたが,色の表示やマウス位置に関してconstrain()
やmap()
を使ったりして上手いこと処理した.
あまり関係ないけど,このサンプルのようなやり方でキーボードのインタラクションからタイムスタンプを呼び出して画像/PDFで書き出せる機能は普通に便利なのでテンプレートを作った.TextExpanderという,俗にスニペットツールと呼ばれるアプリケーションを使っている.他のものでもだいたい一緒だと思う.雛形のコードを登録しておけば,例えばxp5a4
のようなタイプをしてコードを呼び出せる.
こういった効率化の工夫は大事.gistにあげています.
コード
import processing.pdf.*; import java.util.Calendar; boolean savePDF = false; int dpi=72; float width_mm=210; float height_mm=297; int width_px=int(width_mm*0.03937*dpi); int height_px=int(height_mm*0.03937*dpi); void setup() { //settings(); colorMode(HSB, 360, 100, 100, 100); } void settings() { size(width_px, height_px); } void draw() { // save pdf - start if (savePDF) { beginRecord(PDF, timeStamp()+".pdf"); colorMode(HSB, 360, 100, 100, 100); } background(0,0,100); noCursor(); noStroke(); float stepX = constrain(mouseX,1,width); float stepY = constrain(mouseY,1,height); for (float y = 0; y < height; y += stepY) { for (float x = 0; x < width; x += stepX) { float hue = map(x, 0, width, 0, 360); float sat = map(y, 0, height, 100, 0); fill(hue, sat, 100); rect(x, y, stepX, stepY); } } // save pdf - end if (savePDF) { savePDF = false; endRecord(); } } void keyPressed() { if (key=='s' || key=='S') saveFrame(timeStamp()+"_###.png"); if (key=='p' || key=='P') savePDF = true; } String timeStamp() { Calendar now = Calendar.getInstance(); return String.format("%1$ty%1$tm%1$td_%1$tH%1$tM%1$tS", now); }