PROCESSING入門

Processingの基礎を解説します。

カテゴリ: Processing 基本操作

mousePressed

mouseに関する関数は
mousePressed()

mouseDragged()

mouseReleased()
の3つがあります。それぞれの名前が示す動作が行われた場合に呼び出されます。
float bx;
float by;
int boxSize = 75;
boolean overBox = false;
boolean locked = false;
float xOffset = 0.0; 
float yOffset = 0.0; 

void setup() 
{
  size(640, 360);
  bx = width/2.0;
  by = height/2.0;
  rectMode(RADIUS);  
}

void draw() 
  background(0);
  
  if (mouseX > bx-boxSize && mouseX < bx+boxSize && 
      mouseY > by-boxSize && mouseY < by+boxSize) {
    overBox = true;
//mouseがBOXの範囲に入っているとoverBoxをtrueにする。
 
    if(!locked) { 
      stroke(255); 
      fill(153);
//mousePressされいない場合、線だけ白にする。
 
    } 
  } else {
    stroke(153);
    fill(153);
    overBox = false;
  }
//mouseがBOXの範囲に入っていない場合overBOXをtrueにする。 
  

  rect(bx, by, boxSize, boxSize);
}

void mousePressed() {
  if(overBox) { 
    locked = true; 
//もしmouseがBOXの範囲内ならば
 
    fill(255, 255, 255);
  } else {
    locked = false;
  }
 
  xOffset = mouseX-bx; 
  yOffset = mouseY-by; 
//mouseX,Yとbx,byの差を出す。 
}

void mouseDragged() {
  if(locked) {
//もしmouseがBOXの範囲内ならば
 
    bx = mouseX-xOffset; 
    by = mouseY-yOffset; 
//boxの位置をずらす。 
  }
}

void mouseReleased() {
  locked = false;
}

2Dnoise

2D noiseではnoise()の中に2つの値を入れています。

よく原理はわかりませんが、それぞれの値は増加する必要があるようです。xoff,yoffそれぞれの値が大きくなればなるほど、乱雑さは増加します。
float xoff;
float yoff;
float theta;

void setup(){
  size(300,300);
  background(255);
}

void draw(){
  translate(width/2,height/2);
  fill(255);
  line(0,0,230*cos(theta)*noise(xoff,yoff),230*sin(theta)*noise(xoff,yoff));
  theta+=0.01;
  xoff+=0.001;
  yoff+=0.005;
}

normal-fig2

randomGuassina()は正規分布の値をランダムで出力する関数です。

0から+-それぞれに値が大きくなるに従って、でる確立が少なくなります。

randumGuassin
size(400,500);

for (int y = 0; y < height; y++) {
  float x = randomGaussian() * 15;
  line(width/2, y, width/2 + x, y);
}

println(randomGaussian());

randomrandom

random()を2回使うことによって、さらにrandomさを表現することができます。
 
int totalPts = 300;//点の個数
float steps = totalPts + 1; 
  
void setup() {
  size(640, 360);
  stroke(255);
  frameRate(1);//1秒間に1回描写

void draw() {
  background(0);
  float rand = 0;
  for  (int i = 1; i < steps; i++) {
    point( (width/steps) * i, (height/2) + random(-rand, rand) );
//pointのx軸はforが進むごとに少しずつ増加していく。 
    rand += random(-5, 5);//Y軸を-5~+5の間で足していく。
  }
}

このページのトップヘ