【Processing】dist関数を使ってみる

Processing

こんにちは。Evening Music Records株式会社 でインターンをさせて頂いている鶴留です。
今回は、dist関数を使ったプログラムを書いてみようと思います。

dist関数

dist関数は、

dist(x1, y1, x2, y2)

の形で表記され、二点の座標の距離を求めることが出来る関数です。

下のプログラムは、マウス位置の座標(mouseX, mouseY)とキャンバス中央の座標(width/2, height/2)の距離を求めています。左上に表示されているのが距離の値です。

void setup() {
  size(500, 500);
}

void draw() {
  float d = dist(mouseX, mouseY, width/2, height/2);
  fill(255);
  rect(0, 0, width, height);
  fill(0);
  textSize(40);
  text(d, 40, 80);
  stroke(0);
  line(mouseX, mouseY, width/2, height/2);
  noStroke();
  ellipse(width/2, height/2, 10, 10);
  ellipse(mouseX, mouseY, 10, 10);
  println(d);
}

実際に使ってみる

前回の記事で書いた矢印キーで動かす円のプログラムを利用しました。矢印キーで動かせる円を、色の違う円の近くまで移動させると、その色に変わるプログラムです。

float x = 250;
float y = 250;
float r = 50;
float R = 0;
float G = 255;
float B = 255;
float R1 = 255;
float G1 = 0;
float B1 = 255;
float x1 = random(0, width);
float y1 = random(0, height);
float r1 = 20;
float speed = 25.0;

void setup() {
  size(500, 500);
}

void draw() {
  background(0);
  noStroke();
  fill(R, G, B);
  ellipse(x, y, r, r);

  fill(R1, G1, B1);
  ellipse(x1, y1, r1, r1);
  float d = dist(x1, y1, x, y);

  if (d < 20) {
    R = R1;
    G = G1;
    B = B1;
  }
}

void keyPressed() {
  if (key == CODED) { 
    if (keyCode == UP) {
      y -= speed;
    }
    if (keyCode == RIGHT) { 
      x += speed;
    } 
    if (keyCode == DOWN) {
      y += speed;
    }
    if (keyCode == LEFT) {
      x -= speed;
    }
  }
}

d = dist(x1, y1, x, y)で、円と円の距離を求めています。もしその距離が20より小さい時、キーで動かしている円の色が、小さい円と同じ色になります。20より小さい時というふうに条件を指定しているのは、反応しやすいようにするためです。これをif(d == 0)などにしてしまうと円と円の中心座標が一致しなくてはならないので、反応させるのが難しなります。
dist関数を応用すれば、ゲームの当たり判定などに活かせそうですね。

今回は以上になります。

音楽情報バイラルメディアEVENING:https://evening-mashup.com/
※ インターンシップの詳細はこちらから:https://evening-mashup.com/home/music-intern 
※ 就職活動に関する情報はこちらから: https://evening-mashup.com/evening-job 

コメント

タイトルとURLをコピーしました