02-13 グラフを描く

y=xやy=x2などの関数グラフを描く。

■setpoint関数とmoveto関数を作る

line 関数は始点と終点を与えて直線を描くが、関数グラフなどの連続した線を描く場合は、描画現 在位置(LPX,LPY)から(x,y)位置に直線を描く moveto(x,y)関数があると便利である。合わせて現 在位置を設定する setpoint(x,y)を定義する。

例題2-13-1

setpoint と moveto を使って y=x のグラフを描く。キャンバスのサイズは 400×400 とする。

コード

let LPX = 0, LPY = 0;  // 描画現在位置

function setpoint(x, y) {
  LPX = x + width / 2;
  LPY = height / 2 - y;  
}

function moveto(x, y) {
  let px = x + width / 2;
  let py = height / 2 - y;
  line(LPX, LPY, px, py);
  LPX = px; LPY = py;
}

function setup() {
  createCanvas(400, 400);
}

function draw() {
  background(220);
  stroke(0, 0, 255);
  setpoint(-200, 0); moveto(200, 0);  // x軸
  for (let x = -180; x <= 180; x += 20) {
    setpoint(x, 5); moveto(x, -5);
  }
  setpoint(0, 200); moveto(0, -200);  // y軸 
  for (let y = 180; y >= -180; y -= 20) {
    setpoint(-5, y); moveto(5, y);
  }
  
  stroke(0);
  for (let x = -180; x <= 180; x += 10) {
    let y = x;
    if (x == -180)
      setpoint(x, y);
    else
      moveto(x, y);
  }
}

結果

練習問題2-13-1

y=x2のグラフを描きなさい。xを-10~10の範囲でy=x2のyの値を以下の表に書き入れなさい。

この表の結果から、グラフ表示する場合のx座標とy座標の範囲を考えなさい。キャンバスのサイ ズは 400×400 とする。

結果

練習問題2-13-2

y = x3 のグラフを描きなさい。キャンバスのサイ ズは 400×400 とする。

結果

練習問題2-13-3

y = 1/xのグラフを描きなさい。xが0でないか判定する必要がある。キャンバスのサイ ズは 400×400 とする。

結果

練習問題2-13-4

 三角関数は高校の数学で習うが、グラフィックスを行う上では三角関数はとても重要である。三角関数にはsin(サイン),cos(コサイン),tan(タンジェント)がある。y = sin(x)をp5.jsで表すと以下のようになる。

y = Math.sin(x * Math.PI / 180)

多くのプログラミング言語では三角関数に与える引数は「度」ではなく「ラジアン」という単位を使う。x°をラジアンに変換するのに「Math.PI / 180」という変換式を使う。Math.PIは円周率π(3.1415927・・)である。

sinの値の範囲は「-1」~「1」の範囲にある。角度を-360°~360°まで変化させてサインのグラフを描きなさい。

結果