数学関数

絶対値

abs

引数の絶対値を返します。


abs(number)

number: 数値
          

sample


function setup() {
  createCanvas(300, 160);
  background(200);
}

function draw() {
  noLoop();
  text(str(abs(-50)), 50, 50);
  text(str(abs(23.4)), 50, 100);
  text(str(abs(-0)), 50, 150);
}
              

定数

円周率などはあらかじめ定数として用意されています。

TWO_PI

2π。2πラジアンは360°と同じ角度です。
値は6.28318530717958647693です。

PI

円周率πの値です。180°と同じ角度です。 値は3.14159265358979323846です。

HALF_PI

πの半分の値です。直角と同じ角度です。
値は1.57079632679489661923です。

QUARTER_PI

πの4分の1の値です。
値は0.7853982です。

角度設定

angleMode

sin関数やrotate関数などで使用する角度の単位をラジアン法か度数法か選択できます。
デフォルトではラジアン法となっています。


angleMode(mode)

mode: モード
          

モードには、定数DEGREESまたはRADIANSを選択します。
DEGREESは度数法、RADIANSはラジアン法です。

sample


function setup() {
  createCanvas(300, 300);
  background(200);
}

function draw() {
  noLoop();
  //左上
  arc(100, 100, 50, 50, 0, TWO_PI * 0.75);

  //右上
  angleMode(DEGREES);  
  arc(200, 100, 50, 50, 0, 270);

  //中央下
  angleMode(RADIANS);
  arc(100, 200, 50, 50, 0, TWO_PI / 6);
}

              

角度単位の変換

degrees

ラジアン単位の角度を度単位の角度へ変換します。


degrees(radian);

radian: ラジアン単位の角度
          

sample


var rad = PI / 6;
degrees(rad);
// 29.999999
              

radians

度単位の角度をラジアン単位の角度へ変換します。


radians(degree);

degree: 度単位の角度
          

sample


var deg = 60;
radians(deg);
// 1.0471975511965976 これはπ/3と同じ値
              

三角関数

sin

sin関数です。
引数には角度を単位ラジアンで渡します。返り値は-1~1です。


sin(radian)

radian: 角度
          

sample


function setup() {
  createCanvas(300, 300);
  background(200);
}

function draw() {
  noLoop();
  push();
  translate(150 ,150);
  line(-150, 0, 150 ,0);
  line(0, -150, 0, 150);
  for(x = -150; x < 150; x++){
    var radian = TWO_PI / 150 * x;
    var y = 100 * sin(radian);
    point(x, -y);
  }
  pop();
}
              

cos

cos関数です。
引数には角度を単位ラジアンで渡します。返り値は-1~1です。


cos(radian)

radian: 角度
          

sample


function setup() {
  createCanvas(300, 300);
  background(200);
}

function draw() {
  noLoop();
  push();
  translate(150 ,150);
  line(-150, 0, 150 ,0);
  line(0, -150, 0, 150);
  for(x = -150; x < 150; x++){
    var radian = TWO_PI / 150 * x;
    var y = 100 * cos(radian);
    point(x, -y);
  }
  pop();
}
              

平方根(ルート)

sqrt

引数の平方根を返す関数です。負の値を渡すとNaNが返ります。


sqrt(num);

num: 正の数値
          

sample


function setup() {
  createCanvas(300, 300);
  background(200);
}

function draw() {
  noLoop();
  push();
  translate(50,250);
  for(x=0;x < 300;x++){
    const y = sqrt(x) * 10;
    point(x, -y);
  }
  line(-100,0,300,0);
  line(0, -300, 0, 100);
  pop();
}
              

ランダム

random

ランダムな値を返す関数です。


random();

0~1のランダムな値を返す
          

random(n);

n: 上限値
0~nのランダムな値を返す
          

random(n, m);

n: 下限値
m: 上限値
n~mのランダムな値を返す
          

random(array);

array: 配列
配列の中からランダムで要素を取り出す。
          

sample


function setup() {
  createCanvas(300, 300);
  background(200);
}

function draw() {
  noLoop();
  for(i = 0; i< 100; i++){
    const x = random(300);
    const y = random(300);
    ellipse(x, y, 3);
  }
}
              

randomSeed

random関数を使うとき、乱数を生成するための「種」はデフォルトではランダムに選ばれます。 そのため、random関数の出力は毎回ことなります。
毎回同じ乱数を生成したい場合は。randomSeed関数で「種」を固定することができます。


randomSeed(seed);

seed: 数値であればなんでもいい。
          

sample


function setup() {
  createCanvas(300, 300);
  background(200);
  randomSeed(1);
}

function draw() {
  noLoop();
  for(i = 0; i< 100; i++){
    const x = random(300);
    const y = random(300);
    ellipse(x, y, 3);
  }
}
              

seed未設定の場合では、毎回この出力は変化するが、seedを固定することにより毎回同じ出力になります。

randomGaussian

任意のガウス分布(正規分布)を元にランダムに値を返します。
平均点付近に集まったようなランダムを生成することができます。


randomGaussian(mean, sd);

mean: 平均
sd: 標準偏差
          

sample


function setup() {
  createCanvas(300, 300);
  background(200);
}

function draw() {
  noLoop();
  for(i = 0; i< 100; i++){
    const x = randomGaussian(150, 30);
    const y = randomGaussian(150, 100);
    ellipse(x, y, 3);
  }
}
              

ノイズ

noise

与えられた座標のパーリンノイズを生成します。
パーリンノイズは、randomで生成される乱数と比較すると、連続的で自然なランダムシーケンスを生成してくれます。
noise関数は常に0~1の値を返します。


noise(x, [y], [z]);

x: x座標
y: y座標
z: z座標。ただし、3D(WEBGL)モードのときのみ
各座標の増分は0.005〜0.03が望ましい。
          

変数が一つのときは1次元ノイズを、2つの時は2次元ノイズを生成します。

sample


function setup() {
  createCanvas(300, 300);
  background(200);
}

function draw() {
  noLoop();
  for(x = 0; x< 300; x++){
    var y = 300 - noise(x * 0.01) * 300;
    point(x, y);
  }
}
              

function setup() {
  createCanvas(300, 300);
  background(200);
}

function draw() {
  noLoop();
  noStroke();
  for(x = 0; x < 300; x++){
    for(y = 0; y < 300; y++){
      fill(noise(x * 0.01, y * 0.01) * 255);
      rect(x, y, 1, 1);
    }
  }
}
              

noiseSeed

randomSeedと同じく、seedを固定する関数です。
seedを指定することで、毎回同じノイズが得られます。


noiseSeed(seed);

seed: 数値であればなんでもいい。
          

sample


function setup() {
  createCanvas(300, 300);
  background(200);
  noiseSeed(1);
}

function draw() {
  noLoop();
  noStroke();
  for(x = 0; x < 300; x++){
    for(y = 0; y < 300; y++){
      fill(noise(x * 0.01, y * 0.01) * 255);
      rect(x, y, 1, 1);
    }
  }
}
              

このコードは何度実行しても同じ結果を得ることができます。

累乗

pow

数値のn乗を計算する関数です。


pow(e, n);

e: 底
n: 指数
eのn乗を計算します。
          

sample


function setup() {
  createCanvas(300, 300);
  background(200);
}

function draw() {
  noLoop();
  push();
  translate(150,150);
  line(-150, 0, 150, 0);
  line(0, -150, 0, 150);
  for(x = -6; x < 6; x += 0.002){
    var i = x * 25;
    
    stroke(color(255, 0, 0));
    point(i, -pow(x, 2)); //赤

    stroke(color(255, 255, 0));
    point(i, -pow(x, 3)); //黄
    
    stroke(color(0, 255, 0));
    point(i, -pow(x, 4)); //緑
    
    stroke(color(0, 0, 255));
    point(i, -pow(x, 5)); //青
  }
  pop();
}
              

距離

dist

2点間の距離を計算する関数。


dist(x1, y1, x2, y2);

x1, y1: 始点の座標
x2, y2: 終点の座標
          

sample


function setup() {
  createCanvas(300, 300);
  background(200);
}

function draw() {
  background(200);
  line(150, 150, mouseX, mouseY);
  ellipse(150, 150, 10);
  ellipse(mouseX, mouseY, 10);
  var distance = dist(150, 150, mouseX, mouseY);
  text(str(distance), 10, 20);
}