お遊び

Processingがおもしろい。お絵書きだけじゃなくて動画やiSightも簡単に扱える。ちょっとiSightの映像にマウスドラッグで線を追記できるコードを書いてみた。鏡にマジックで絵を描く感覚。ローラー上でのフォーム変化や、ゴルフのスウィング分析に使えるじゃないんだろうか。iSightや動画アプリがこんなに簡単に作れるなんて!

import processing.video.*;

int x;
int y;
boolean drag = false;
LineSet[] lineSet = new LineSet[0];
LineSet tmpLine;
Capture video;

void setup() {
  size(800, 600);
  video = new Capture(this, 800, 600, 30);
}

void draw() {
  if (video.available()) {
    video.read();
    image(video, 0, 0);
  }
  strokeWeight(3);
  for (int i = 0; i < lineSet.length; i++) {
    lineSet[i].drawLine();
  }
  strokeWeight(1);
  if (drag) {
    tmpLine.drawMarker();
  }
}

void mousePressed() {
  x = mouseX;
  y = mouseY;
}

void mouseReleased() {
  lineSet = (LineSet[])append(lineSet, new LineSet(x, y, mouseX, mouseY));
  drag = false;
}

void mouseDragged() {
  tmpLine = new LineSet(x, y, mouseX, mouseY);
  drag = true;
}

class LineSet {
  int x1, y1;
  int x2, y2;
  
  LineSet(int ax1, int ay1, int ax2, int ay2) {
    x1 = ax1;
    y1 = ay1;
    x2 = ax2;
    y2 = ay2;
  }
  
  void drawLine() {
    line(x1, y1, x2, y2);
  }

  void drawMarker() {
    line(x1, y1, x2, y2);
    ellipse(x1, y1, 6, 6);
    ellipse(x2, y2, 6, 6);
  }
}