スタートページJavascriptCANVAS

canvasxy.js 使用解説書


canvasxy.jsの概要

目的

canvasxy.js の利用方法

本書の利用方法

著作権等

関数一覧

CANVAS 関連
  setScreen     Canvasの定義(必須)
  clearScreen    Canvasのクリア
  saveCanvas    Canvasの保存
  restoreCanvas   Canvasの復元
ドロー系図形
  drawPoint     点
  drawLine     直線
  drawLineArrow   矢印付きの直線
  drawRect     長方形
  drawTri      三角形
  drawPolygon    多角形
  drawRegularPolygon 正多角形
  drawCircle    円
  drawEllipse    楕円
  drawArc      円弧
  drawArcArrow   矢印付き円弧
  drawArcFan    扇形
  drawBezie2    2次ベジェ曲線(制御点1個)
  drawBezie3    3次ベジェ曲線(制御点2個)
文字列
  drawText     文字列
  drawTextRotate1  文字列の回転
  drawTextRotate2  文字列の回転(2点指定)
画像
  drawImage     画像
  drawImageZPR    画像のズームや回転
数式のグラフ
  drawFx       陽関数 y = F(x) 
  drawTxy      媒介関数 x = Fx(t), y = Fy(t)
  drawRt       極座標関数 r = Rt(t), x=r*cos(t), y=r*sin(t)
  drawFxy      陰関数 Fxy(x,y)=0
  drawZxy      等高線 Zxy(x,y)=z
  drawWuv      3次元座標陽関数 w = W(u,v)
軸、補助線
  drawLineYscale  補助線(Y軸、水平線)
  drawLineXscale  補助線(X軸、垂直線)
  drawTextXYscale  水平軸の下、垂直軸の左に目盛り
  drawTextXscale  水平軸の下に目盛り
  drawTextYscale  垂直軸の左に目盛り
  axisStepFixed   補助線や目盛りの刻み幅の自動計算
  drawConCircle   放射状補助線
  drawLineRad    放射状補助線
  drawWuvAxis    3次元UVW座標系の軸表示
  drawLegend     凡例の表示
支援関数
  toXY       座標変換 (w,h)→(x,y)
  toWH       座標変換 (x,y)→(w,h)
  color3a      色表示変換 #rggbb","rgb(r,g,b)", "fgba(r,g.b.a)"→[red,green,blue,alfa]  
  colorHEX     色表示変換 [red,green,blue,alfa] → #rggbb","rgb(r,g,b)", "fgba(r,g.b.a)"
  toRad       角度変換 度数法→ラジアン
  toDeg       角度変換 ラジアン→度数法
  rotateByAngle   回転移動後の点座標
  symmetryPoint   軸対象の点
  UVWtoXY      3次元座標(u,v,w) の2次元座標(x,y)への射影
特殊な機能
  clickCanvas    クリック点の座標、色の表示

グローバル変数

canvasxy.jsでは、最初に呼ばれる setCanvas で、
   canvas = document.getElementById(canvasname);
   ctx = canvas.getContext('2d');
によりcanvasを定義しています。
そして、次の値を与えることにより、W-H座標系とX-Y座標系の対応をしています。
   cw = 400; ch = 400;
   xmin = -4; xmax = 4; ymin = -4; ymax = 4;
また、canvasの全ピクセルの保管用に canvasImageData があります。
これら赤字の変数は、グローバル変数として定義しています。

パラメータ


CANVAS 関連

setCanvas Canvasの設定(必須)  先頭に戻る

setCanvas(canvasname, backcolor [, w, h, xxmin, xxmax, xymin, yymax])
  canvasname // HTML で定義した canvas名
  backcolor  // 背景色
  w,h     // canvasのサイズ。グローバル変数のcw,chに相当(HTMLでの定義のままなら省略)
  xxmin,xxmax,yymin,yymax // グローバル変数のxmin,xmax,ymin,ymax に相当 後で設定してもよい。

canvasのサイズ指定

setCanvasA  <canvas id="setCanvasA" width="300" height="200"></canvas>
  HTMLでの指定のまま        setCanvas("setCanvasA", "red");
setCanvasB  <canvas id="setCanvasB"></canvas>
  HTMLでは指定なし。200,150 に設定 setCanvas("setCanvasB", "green", 200, 150);
setCanvasC  <canvas id="setCanvasC" width="80" height="60"></canvas>
  HTMLでの指定を 100,200 に変更  setCanvas("setCanvasC", "blue", 100, 200);

実行結果

setCanvasA
setCanvasB
setCanvasC

全体の記述例

canvasxyを利用するには、それに先立ち、HTML に記述した canvas を JavaScript に伝える必要があります。
それが setCanvas であり、setCanvas は最初に一回だけ記述しなければなりません。

引数にグローバル変数(cwやxxmin等)を与えるとき 引数にグローバル変数を与えないとき
function setCanvasRei1() {
    // ========= setCanvas
    // cw=400; ch=300; xmin=-4; xmax=4; ymin=-3; ymax=-3 とする
    setCanvas("canvasD", "yellow", 400,300, -4,4, -3,3);
    // =========== 以降、任意の関数の表示ができる
    // 補助線と目盛
    drawLineXscale(1, "gray", 1, "black", 4);
    drawLineYscale(1, "gray", 1, "black", 4);
    drawTextXYscale(-4, 4, 1, -3,3, 1, "black", 16);
    // 直線
    drawLine(-2, 1, 3, -2, "blue", 6);
    // 画像
    drawImage("120x80.jpg", -2,-1);
    // 矩形
    drawRect(-1,1, 2,2, "red", 4, "none");
}
function setCanvasRei2() {
    // ========= setCanvas
    setCanvas("canvasE", "white");
    // ========= グローバル変数の設定
    // CANVASの横幅cwと縦幅ch(HTMLでのサイズを使うなら省略可能)
    cw = 400; ch = 300;
    // xy座標系での範囲指定
    xmin = -4; xmax = 4;    ymin = -3; ymax = 3;
    // =========== 以降、任意の関数の表示ができる
    // 上と同じ
}

<canvas id="canvasD" width="80" height="60"></canvas>

<canvas id="canvasE" width="400" height="300"></canvas>

clearCanvas Canvasのクリア 
clearScreen Canvasのクリア(clearCanvas の別名)  先頭に戻る

clearCanvas(fillcolor);
clearScreen(fillcolor);
    clearCanvas("gray");   // canvas全体を gray で塗りつぶす。
    clearScreen("yellow"); // canvas全体を yellow で塗りつぶす。

saveCanvas canvasの保存 
restoreCanvas canvasの復元  先頭に戻る

saveCanvas();
restoreCanvas();
saveCanvasは、canvas画面をビットマップ情報にして、グローバル変数canvasImageDataに保存
restoreCanvasは、canvasImageDataからcanvas画面を復元
組合せることにより、最近に追加した要素を取り消して前の画面に復元することができる。
しかし、その画面はビットマップでありドロー情報は失われている。

処理実例

 
ステップ1 保存する直前までのcanvasを表示(補助線、画像)
ステップ2 canvasImageDataに保存。canvas画面は変わらない
ステップ3 ステップ1の画面に追加(直線)
ステップ4 ステップ2の画面に復元(ステップ3の直線は消去)
ステップ5 ステップ4の画面に追加(直線)

ドロー系図形

drawPoint 点  先頭に戻る

drawPoint(x,y, pointcolor, pointsize)

drawPoint(1.4, 1.5, "red", 6); // 中心点(1.4, 1.5)に、"red"色でピクセル6の正方形の点

drawLine 直線  先頭に戻る

drawLine(x0,y0, x1,y1, linecolor, linewidth [,dash])

drawLine(-1, 1, 3, 2, "red", 4); // 起点(-1, 1)、終点( 3, 2)、"red"色、太さ4の実線
drawLine(-3, 1, 2, -2, "blue", 2, [8,4]);    // 破線
drawLine(-3, -2.5, 3, -2.5, "green", 2, [40,4, 4,4]); // 鎖線

drawLineArrow 矢印付きの直線  先頭に戻る

drawLineArrow(x0,y0, x1,y1, linecolor, linewidth, arrow [,dash])
 arrow = "end" (省略時)点(x1,y1)に付ける
     "start" 点(x0,y0)
     "both" 両点

    drawLineArrow(-1, 1, 3, 2, "red", 4, "end");            // (3,2) に矢印
    drawLineArrow(-3, 1, 2, -2, "blue", 2, "start", [8,4]); // (-3,1) に矢印
    drawLineArrow(-2,-2, 3, -3, "green", 2, "both");        // 両端に矢印

drawRect 矩形  先頭に戻る

drawRect(x0,y0, x1,y1, linecolor, linewidth, fillcolor [,dash])

    drawRect(-3, 3, 1, 1, "red",   4, "none");   // 枠のみ
    drawRect(-3,-1, 1,-3, "blue",  4, "rgba(0,0,255, 0.3)"); // 塗りつぶし
    drawRect( 2, 2, 3,-2, "green", 4, "none", [4,2]);
    drawRect(xmin,ymin, xmax,ymax, "black", 4, "none"); // CANVASの枠

drawTri 三角形  先頭に戻る

drawTri(x0,y0, x1,y1, x2,y2, linecolor, linewidth, fillcolor [,dash])

drawTri(-1,-1, 1 2, 3,0, "blue", 4, "yellow");
  // 3点((-1,-1)、(1 2)、(3,0)を頂点とする三角形。枠線は"blue"色で太さ4.内部は"yellow"色

drawPolygon 多角形  先頭に戻る

drawPolygondrawPolygon(xyarray, linecolor, linewidth, fillcolor [,dash]);
  xyarray:各頂点(x,y)の配列。[ [x0,y0],[x1,y1],…,[xn,yn] ]

 赤の5角形 
    var xyarray1 = [ [-2,2],[0,3],[1,2],[1,1],[-1,1] ];
    drawPolygon(xyarray1, "red", 4, "none");
 青の5角形 
    var xyarray2 = [ [-2,-1],[0,-2],[2,-1],[2,-3],[-2,-3] ];
    drawPolygon(xyarray2, "blue", 4, "rgba(0,0,255,0.3)", [8,4]);
                         透過率 破線

drawRegularPolygon 正多角形  先頭に戻る

drawRegularPolygon(n, x,y, r, base, type, linecolor, linewidth, fillcolor [,dash])
  n:   ≧3 n角形、辺・頂点の数
  x,y:  正多角形の外接円の中心座標
  r:   その半径
  base: 0=円中心の下が底辺、1=円中心の下が頂点
  type: 0=周辺のみを表示、1=対角線だけを表示、2=周辺と対角線を表示
  linecolor:線(周辺、対角線)の太さ
  fillcolor:正多角形内部の色。 塗らないときは "none" 対角線部分だけの塗りつぶしはできない

                       n   x,y   r base type
    drawRegularPolygon(5, -2,2,  1, 0,   0, "red",   2, "rgba(255,0,0,0.3)");  // 上左図:下底辺、周辺のみ
    drawRegularPolygon(5,  2,2,  1, 1,   1, "blue",  2, "none");               // 上右図:下頂点、対角線のみ
    drawRegularPolygon(5, -2,-2, 1, 0,   2, "green", 2, "rgba(0,255,0, 0.3)", [8,4]); // 下左図:下底辺、両方
    drawRegularPolygon(5,  2,-2, 1, 0,   1, "blue",  2, "rgba(0,255,0, 0.3)"); // 下右図:対角線部分だけの塗りつぶし不可
                               無効

drawCircle 円  先頭に戻る

drawCircle(x,y, r, linecolor, linewidth, fillcolor [,dash])

  drawCircle(-1,-1, 2, "red", 4, "rgba(255,0,0, 0.3");
    中心(-1,-1)、半径2の円。円周は"red"色で太さ3。内部は"rgba(255,0,0, 0.3"色

drawEllipse 楕円  先頭に戻る

drawEllipse(x,y, r1, r2, angle, linecolor, linewidth, fillcolor [,dash]);
  x,y,; 楕円中心座標
  r1,r2: 楕円のX方向、Y方向の半径
  angle: 回転角度、X軸右方向から反時計回り
         x,y, r1,r2, angle,          color,  width, fillcolor [,dash]
    drawEllipse( 1,2,  2,1,   0*Math.PI/180, "red",    4,  "none");              // 枠のみ
    drawEllipse(-2,0,  1,2,   0*Math.PI/180, "green",  4,   "rgba(0,255,0, 0.2"); // 塗りつぶしあり 
    drawEllipse( 1,-1, 2,1,  30*Math.PI/180, "blue",   4,   "none",     [8,4]);   // 30度反時計回り回転

drawArc 円弧  先頭に戻る

drawArc(x,y, r, startAngle, endAngle, linecolor, linewidth, dash):
  x,y, r 中心座標と半径
  startAngle, endAngle 円弧の始点と終点の角度
          中心 半径 startAngle    endAngle     
    drawArc(0,0, 2,  30*Math.PI/180, 120*Math.PI/180, "red",   6); // 赤 30→120
    drawArc(0,0, 3, 120*Math.PI/180,  30*Math.PI/180, "blue",  6); // 青 120→30

drawArcArrow 矢印付きの円弧 先頭に戻る

drawArcArrow(x,y, r, startAngle, endAngle, linecolor, linewidth, arrow);
  x,y, r 中心座標と半径
  startAngle, endAngle 円弧の始点と終点の角度
  arrow 矢印位置  "end" (省略時解釈)終点、"start"(始点) "both"(両端)
     x,y    r   始点と終点 arrow
  赤  -1,-1, 1.5,  30→100  "end"
  緑  -1,-1, 2,    30→100    "start"
  青  -1,-1, 2.5,  30→100    "both"
  黒  -1,-1, 3,    30→300    省略=end
  茶  -1,-1, 3.5, -30→ 30    省略=end

drawArcFan 円弧・扇形  先頭に戻る

drawArcFan(x,y, r, startAngle, endAngle, type, linecolor, linewidth, [fillcolor, ribwidth. ribcolor]);
    x,y,r    // 中心の座標と半径
  startAngle, endAngle // 円弧の始点・終戦の角度
  type     // "arc" 円弧、 "fan" 扇形(中心との三角形も含む)
    ribwidth. ribcolor   // リブの太さと色(arcのとき不要。fanでも円弧と同じなら不要)
   (枠線に破線指定はできません)
ケース1 図形の種類
 左上(赤) 円弧(塗りつぶしなし)
 右上(緑) 扇形(塗りつぶしなし)
 左下(青) 円弧(塗りつぶしあり)
 右下(黒) 扇形(塗りつぶしあり)リブの太さを変更
ケース2 始点と終点の関係
 左上(赤) 30→100(塗りつぶしなし)
 右上(緑) 30→300(塗りつぶしなし)
 左下(青) 100→30(塗りつぶしあり)
 右下(黒) -60→30(塗りつぶしあり)
ケース3 パラメータの指定
 左上(赤) ribwidth. ribcolor 指定
 右上(緑) ribwidth. ribcolor 省略 linewidth,linecolorと同じ 
ケース4 「凹型。塗りつぶしあり」での工夫
 左上 完成図 これを作成するために、次の工夫をしている
 右上 円弧を表示。鏃の部分の着色をする必要があるがかなり面倒
    始点と終点の中間点を設けて、二つの凸型にすればよい
          var middleAngle = (startAngle + endAngle) / 2;
          if (startAngle > endAngle) middleAngle = middleAngle + Math.PI;
          var xm = r*Math.cos(middleAngle) + x;
          var ym = r*Math.sin(middleAngle) + y;
 左下と右下になる。実際にはリブの線は塗りつぶしの色と同じにして見えなくする
 リブの直線を表示する

drawBezie2 2次ベジェ曲線(制御点1個)  先頭に戻る

drawBezie2(x0,y0, px,py, x1,y1, linecolor, linewidth);
  始点 (x0,y0)
  終点 (x1,y1)
  制御点 (px.py) 
    drawBezie2(-2,-2, -1,1, 2,3, "red", 4);
    直線 (-2,-2)-(2,3) を制御点(-1,1)で左上に引っ張る

drawBezie3 3次ベジェ曲線(制御点2個)  先頭に戻る

drawBezie3(x0,y0, px1,py1, px2,py2, x1,y1, linecolor, linewidth[, dash]);
  始点 (x0,y0)
  終点 (x1,y1)
  制御点 (px1.py1),(px2.py2)
    drawBezie3(-2,-2, -1,1, 3,1, 2,3, "red", 4);
  直線 (-2,-2)-(2,3) を制御点(-1,1)で左上に、(3,1)で右に引っ張る

文字列

drawText 文字列  先頭に戻る

drawText(text, x,y, position, color, font);
  text:表示する文字列
  x,y, position: 文字列(矩形)のどの部分を(x.y)に合わせるか
    "middle,center" の形式(これが省略時解釈)
    左右位置:"end"(文字列の末尾)|"start"(先頭)|"center"(中央)
    上下位置:"top"(上部。(x,y)の下に表示)|"bottom"|"middle"
    一方だけを指定することができる。両方とも指定しないときは "" とする。
  font:"16px sans-serif" の形式。CSSでの表示と同じ
    単に 16 のように数値(fontsize)だけを与えると "px sans-serif" が付加される。
              text            x,y,   position         color   font
    drawText("end,top",      -1,3,  "end,top",       "red",    14);
    drawText("start,top",     1,3,  "start,top",     "red",    14);
    drawText("end,middle",   -1,2,  "end,middle",    "blue",   16);
    drawText("start,middle",  1,2,  "start,middle",  "blue",   16);
    drawText("end,botoom",   -1,1,  "end,bottom",    "green",  20);
    drawText("start,botoom",  1,1,  "start,bottom",  "green",  20);
    drawText("center,top",   -2,-1, "center,top",    "red",    14);
    drawText("center,middle",-2,-2, "center,middle", "blue",   16);
    drawText("center,bottom",-2,-3, "center,bottom", "green",  20);
    drawText("serif",         1,-1, "start,middle",  "red",   "20px serif");
    drawText("Arial",         1,-2, "start,middle",  "blue",  "30px Arial");
    drawText("MS 明朝",       1,-3, "start,middle",  "green", "40px 'MS 明朝'");

drawTextRotate1 文字列の回転  先頭に戻る

function drawTextRotate1(text, x,y, tan, position, color, font);
  text:表示する文字列
  x0,y0:表示位置
  tan:回転方向。y = tan*(x-x0) + y0
  position: 文字列(矩形)のどの部分を(x0.y0)に合わせるか
   "middle,center" の形式(これが省略時解釈)
   左右位置:"end"(文字列の末尾)|"start"(先頭)|"center"(中央)
   上下位置:"top"(上部。(x,y)の下に表示)|"bottom"|"middle"
   一方だけを指定することができる。両方とも指定しないときは "" とする。
    color:文字の色
    font:"16px sans-serif" の形式。CSSでの表示と同じ
   単に 16 のように数値(fontsize)だけを与えると "px sans-serif" が付加される
ケース1
 position を"center,middle"に固定、tan を変化、
ケース2
 tan=0.3 に固定、position を変化

drawTextRotate2 文字列の回転  先頭に戻る

drawTextRotate2(text, x0,y0, x1,y1, position, color, font);
  text:表示する文字列
  x0,y0, x1,y1:回転の角度を直線で与える
   直線の中点が文字列の中点になる
  position: 文字列(矩形)のどの部分を(x.y)に合わせるか
   "over" 線の上部、"middle" 線の位置、"under" 線の下部
  font:"16px sans-serif" の形式。CSSでの表示と同じ
   単に 16 のように数値(fontsize)だけを与えると "px sans-serif" が付加される
[図の説明]
・図では、参考のために直線を表示した。矢印は(x1,y1)側
・図では、すべて posicion="over" にしている。
  "under" にすると線の反対側、"middle" にすると線に重なる。
・文字列が上下反転する場合がある。それを避けるには x0 < x1 に設定すればよい。

X軸・Y軸に平行

斜線


画像

drawImage 画像(単純)  先頭に戻る

drawImage(image, x,y);
  image:画像ファイルのURL
  x,y:画像左上の表示場所
  drawImage("120x80.jpg", 0,1);
    画像 "120x80.jpg" の左上端が (0,1) になるように表示

drawImageZPR 画像のズームや回転  先頭に戻る

drawImageZPR(image, x,y, {オプション});
 image           // 表示する画像ファイルのURL
 x,y            // 画像の左上端(位置調整で変更)が CANVAS に表示する位置
 オプションと省略値
  位置調整 : "左上",   // 画像のこの位置を、画像左上x,画像左上yに設定する
  画像幅 : 0, 画像高 : 0, // 指定すると画像をズームして表示。0のときはズームしない
  回転位置 : "左上",   // 回転するときの画像の位置("中央", "左上", "左下", "右上", "右下")
  回転角度 : 0      // ラジアン、反時計回り。0のとき回転しない。
例0オプションなし。drawImageと同じ
  drawImageZPR("120x80.jpg", 0,1, {} ); // {} が必要
例1画像の中心を(0,1)に
  drawImageZPR("120x80.jpg", 0,1, {位置調整:"中央"} );
例2ズーム
  drawImageZPR("120x80.jpg", 0,1, {画像幅:160, 画像高:120} );
例3回転(中心、30°)
  drawImageZPR("120x80.jpg", 0,1, {回転位置:"中央", 回転角度:30*Math.PI/180} );
例4例1・2.3の組合せ
  drawImageZPR("120x80.jpg", 0,1, {位置調整:"中央", 画像幅:160, 画像高:120, 回転位置:"中央", 回転角度:30*Math.PI/180} );

数式のグラフ

全体の記述順序
  ステップ1 setCanvasのcanvasの定義 cw.ch は必須
    Aタイプ:xmin 等も与える。setCanvas(CanvasID, fillcolor, cw,ch, xmin,xmax,ymin,ymax);
    Bタイプ:cw,ch だけを与えて xmin 等を与えない。setCanvas(CanvasID, fillcolor, cw,ch);
  ステップ2:グラフの作成(ここが当関数)
    Bタイプでは、ここのオプションパラメータで xmin 等を与える。
    複数の関数を表示するには、xmin 等が同一なので、Aタイプにするほうがよい。
  ステップ3:補助線や目盛りの表示
    Aタイプのときは、ステップ2と3が逆でもよい。
オプションパラメータ
  省略時解釈は個々の関数説明に記述
  オプション指定が不要な場合でも、空の {} を記述する。
  { xxmin:-4, xxmax:4. … } の形式で与える。記述順序は任意
  関連している引数は、すべて与えるかすべて省略すること。その判断は「代表引数」で行っている
    xxmin を与えたら、xxmax.yymin.yymax も与える。xxminが代表引数
    代表引数 xfrom. 関連引数 xto
複数のグラフ  xmin 等が同じときは次のように記述すればよい
  ステップ2で複数のグラフ命令を指定する。異なる型のグラフでもよい。
    setCanvas(CanvasID, fillcolor, cw,ch, xmin,xmax,ymin,ymax);
        drawFx(…):
        drawTxy(…):
  同じ型では、複数のグラフを一つのグラフ命令で記述できる。
        drawFx( [関数0, 関数0, …], …): 配列で与える。パラメータも配列で与えるものがある。
遅延(ibterval)
  指定しないとグラフ全体が同時に表示される。
  指定する(1000=1秒)と、グラフが x や t の変化に伴い伸びるように表示される。
   (このとき、刻みは最小の値がすべてのグラフに適用される

drawFx 陽関数 y = F(x) のグラフ  先頭に戻る

drawFx(Fx, lineColor, lineWidth,
          { xxmin, xxmax, yymin, yymax, xfrom, xto,  dx,  interval } );

 必須パラメタ
    Fx: // スカラーまたは配列。y = F(x) の式を文字列で与える "x*(x-2)"
  lineColor, lineWidth, //スカラーまたは配列。グラフの色、太さ
  オプションパラメータ 不要なときも {} を与える
    xxmin, xxmax, yymin, yymax, // スカラーのみ。表の範囲。xxminの省略時はグローバル変数の xmin などになる。
               // xxmin に値を与えるときは他の項目にも値を与える必要がある。
    xfrom, xto,  // スカラーまたは配列。グラフの表示範囲。省略時は xxmin,xxmax
    dx,          // スカラーまたは配列。グラフ作成での刻み幅。省略時は (xto-xfrom)/100
    interval     // スカラーのみ。グラフが左から右に伸びるように表示される。
                 //  これを与えると全てのグラフに最小の dx が適用される。
 (配列項目をスカラーで与えると、すべてのグラフが同じになる。配列数が少ないと最後のものが適用される)
ケース1 xmin等をsetCanvasで与える。グラフは1本。オプションなし。
  setCanvas("drawFxCanvas", "yellow", 400,400, -4,4, -4,4);  
  drawFx("x*(x-2)", "red", 4, {}); // オプションがないときも {} は必要
ケース2xmin等をdrawFxで与える。グラフは1本。オプションあり。
  setCanvas("drawFxCanvas", "yellow", 400,400);  
  drawFx("x*(x-2)", "red", 4,
    {xxmin:-3,xxmax:3, yymin:-2,yymax:4,  // xmin 等を変更(グラフが拡大される)
        xfrom:-1, xto:3,   // グラフの計算や表示範囲の変更
        dx:0.2,            // 刻みを粗くした。スムーズな曲線にならない
        interval:200 });   // 遅延表示
ケース3 複数のグラフ
  setCanvas("drawFxCanvas", "white", 400,400, -4,4, -4,4);  
    drawFx(["x*(x-2)", "x*(x+1)*(x-1)"], ["red","blue"], [6,1],
      { xfrom:[-1, -1.5], xto:[3, 1.5] });
   配列記述形式:すべてのグラフに同じ値を与えるとき、次のように記述することができる。
    スカラーで与える "red"  xfrom:-1
    配列の一部を与える ["red"]  xfrom:[-1] (配列数が不足のときは最後の要素が繰り返される)
ケース4[参考]点 (0,0) 以外をベースにしてグラフを表示。グラフには無関係で補助線での対応
    drawFx("(x-12)*(x-14)", "red", 4,             // グラフはXが大きい部分に特徴がある
         {xxmin:8,xxmax:16, yymin:-2,yymax:6,     // それに合わせて xmin等の範囲を変更
          xfrom:10, xto:15, dx:0.1});
    drawTextXYscale(xmin,xmax, 1, ymin,ymax, 1, "black", 16, // スケールも変える必要
        10,   // x=10 がY軸になる
        -1);  // y=-1 がX軸になる
ケース5 パラメタ変更での実験
CANVAS関係
 幅cw 高ch 背景
 XY系範囲 xmin xmax ymin ymax
グラフ関係
 Fx
  線色 線幅 計算範囲xfrom xto dx
 Fx
  線色 線幅 計算範囲xfrom xto dx
 Fx
  線色 線幅 計算範囲xfrom xto dx
 遅延 (1000=1秒)
補助線関係
 X軸目盛刻み X軸位置
 Y軸目盛刻み Y軸位置

⇒ 参照事例:陽関数のグラフ

drawTxy 媒介関数 x = Fx(t), y = Fy(t) のグラフ  先頭に戻る

drawTxy(Txy, lineColor, lineWidth, tmin,tmax,
    { xxmin, xxmax, yymin: yymax, dt } );

  必須パラメータ
    Txy             // グラフが1組なら [Fx.Fy] のベクトル
                          // 複数組なら [ [Fx1,Fy1],  [Fx2,Fy2],… ] のマトリックス
    lineColor, lineWidth  // グラフの色と線。グラフが1つならスカラー、複数なら配列で与える
  tmin,tmax       // 媒介変数 t の計算範囲。スカラーあるいは配列
  オプションパラメータ
  xxmin, xxmax, yymin: yymax // スカラー。表の範囲。省略時はグローバル変数の xmin などになる
                // すべて与えるかすべて省略する、一部指定はできない。
    dt                // グラフ作成での刻み幅。スカラーあるいは配列。省略時は (tmax-tmin)/100
    interval                   // スカラー。グラフ表示の遅延時間 1000=1秒
ケース1 xmin等をsetCanvasで与える。オプションなし。
    setCanvas("drawTxyCanvas", "white", 400,400);
    drawTxy(["Math.cos(t)", "Math.sin(3*t)"],  // 関数は Fx と Fy のペアなので [ ] で囲む
            "red", 4, 0, 2*Math.PI, {}); // オプションなしでも {} は必要
ケース2 xmin等をdrawFxで与える。オプションあり。
    setCanvas("drawTxyCanvas", "white", 400,400);
    drawTxy(["Math.cos(8*t)-Math.cos(t)",
            "Math.sin(8*t)-Math.sin(t)"],
            "red", 4, 0, 2*Math.PI,
           { xxmin:-3, xxmax:3, yymin:-3, yymax:3, dt:0.01, interval:10 } );
ケース3 複数のグラフ
    setCanvas("drawTxyCanvas", "white", 400,400, -2,2, -2,2);
    drawTxy([ ["Math.cos(t)", "Math.sin(3*t)"],["t/2", "1/t"] ], // [ [Fx0,Fy0], [Fx1,Fy1],…] の形式
            ["red","blue"],
             4,   // [4, 4] としたのと同じ
            [0, -2],
            [2*Math.PI, 2], {});
ケース4 パラメタを変化させて結果のグラフで確認
キャンバス関係
 横幅 縦幅 背景色
xmin xmax ymin ymax
グラフ関係
 関数Fx Fy
   線色 線幅 tmin tmax dt
 関数Fx Fy
   線色 線幅 tmin tmax dt
 関数Fx Fy
   線色 線幅 tmin tmax dt
 遅延
補助線関係
 X軸目盛刻み X軸位置
 Y軸目盛刻み Y軸位置

⇒ 参照事例:媒介関数のグラフ

drawRt 極座標関数 r = Rt(t), x=r*cos(t), y=r*sin(t) のグラフ  先頭に戻る

drawRt(Rt, lineColor, lineWidth, tmin, tmax,
        { xxmin, xxmax, yymin, yymax, dt, intarval });

   必須パラメタ
     Rt: // スカラーまたは配列。y = F(x) の式を文字列で与える
    lineColor, lineWidth, // スカラーまたは配列。グラフの色、太さ
     tmin, tmax,     // スカラーまたは配列。開始・終了角度(ラジアン、反時計回り、tmin < tmax
   オプションパラメータ 不要なときも {} を与える
     xxmin, xxmax, yymin, yymax, // スカラーのみ。表の範囲。xxminの省略時はグローバル変数の xmin などになる。
                  // xxmin に値を与えるときは他の項目にも値を与える必要がある。
     dt,          // スカラーまたは配列。グラフ作成での刻み幅。省略時は (xto-xfrom)/100
     interval=0   // スカラーのみ。グラフが左から右に伸びるように表示される。
                  //  エラー:現在interval機能は機能していません!!!
  (配列項目をスカラーで与えると、すべてのグラフが同じになる。配列数が少ないと最後のものが適用される)
ケース1 xmin等を事前に記述するとき
    drawRt("Math.cos(2*t)", "red", 4, 0, 2*Math.PI, {});
ケース2 xmin等をdrawFxのパラメタで与えるとき
    drawRt("2*Math.cos(t) + Math.cos(2*t)", "red", 4, 0, 2*Math.PI,
         {xxmin:-1,xxmax:3, yymin:-2,yymax:2, dt:0.05});
ケース3 複数のグラフ
    setCanvas("drawRtCanvas", "white", 400,400, -1,3,-2,2);
    drawRt(["Math.cos(2*t)","2*Math.cos(t) + Math.cos(2*t)"],
            ["red","blue"], 4, 0, 2*Math.PI,
          { dt:0.05 } );
ケース4 パラメータを変化して結果を表示する
キャンバス関係
 幅cw 高ch 背景
 XY系範囲 xmin xmax ymin ymax
グラフ関係
 Rt[0] 線色 線幅 tmin tmax dt
 Rt[1] 線色 線幅 tmin tmax dt
 Rt[2] 線色 線幅 tmin tmax dt
 遅延1000=1秒、0のとき遅延なし
補助線関係
 X軸目盛刻み X軸位置  Y軸目盛刻み Y軸位置
 円周刻み 角度刻み

⇒ 参照事例:極座標関数のグラフ

drawFxy 陰関数 Fxy(x,y)=0 のグラフ  先頭に戻る

drawFxy(Fxy, lineColor, lineWidth, 
             { xxmin, xxmax, yymin, yymax, 
               xfrom, xto, yfrom, yto,
               dx, dy,  eps,  interval=0 }        
         ) {

   必須パラメータ
     Fxy,                        // 配列あるいはスカラー。陰関数 Fxy(x,y)=0 
     lineColor, lineWidth,       // 配列あるいはスカラー。グラフ(点)の色と太さ
   オプションパラメータ
     xxmin, xxmax, yymin, yymax, // スカラーのみ。表の範囲。省略時はグローバル変数の xmin などになる
     xfrom, xto, yfrom, yto,     // 配列あるいはスカラー。グラフの表示範囲。省略時は xxmin,xxmax
     dx, dy,                     // スカラーのみ。グラフ作成での刻み幅。省略時は (xmax-xmin)/100
     eps,                        // スカラーのみ。|Fxy|<eps で0になったとする。省略時は 0.05
     interval                    // スカラーのみ。遅延
次の方法でグラフにしているので、テスト以外での利用には適さない
    for (var x=xfrom; x<=xto; x=x+dx) {
        for (var y=yfrom; y<=yto; y=y+dy) {
           |Fxy(x,y)| < eps のとき (x,y) に点を表示
        }
    }
 効率を良くするために、xfrom などの指定により探索範囲を小さくする必要がある
 dx,dy を大きくすると効率は良くなるが、点の間隔が広がる
 eps を大きくすると太線になる。小さくすると点が表示されないことがある
ケース1 xmin等をsetCanvasで与える。オプションなし。
    setCanvas("drawFxyCanvas", "white", 400,400, -2,2, -2,2); // xmin 等をここで与える。
    drawFxy("x*x + y*y - x*y -1", "red", 4, {}); // オプションがないときも {} は必要
ケース2 xmin等をdrawFxyのパラメタで与える
    setCanvas("drawFxyCanvas", "white", 400,400);
    drawFxy("3*x*x*x + y*y*y -1", "red", 4,
        {xxmin:-2,xxmax:2, yymin:-2,yymax:2,
         xfrom:-1.5, xto:1.5, yfrom:-1.5, yto:1.5,
         dx:0.02, dy:0.02,
         eps:0.1,
         interval:10} );
ケース3 複数のグラフ
    setCanvas("drawFxyCanvas", "white", 400,400, -2,2, -2,2);
    drawFxy(["x*x + y*y - x*y -1","3*x*x*x + y*y*y -1"], 
            ["red","blue"], [2,4],
          { xfrom:-1, xto:1,
            yfrom:-1.5, yto:1.5,
            dx:0.02, dy:0.02,
            eps:0.05,
            interval:10
          } );
ケース4 パラメータを変化させて確認
CANVAS関係
 幅cw 高ch 背景
 XY系範囲 xmin xmax ymin ymax
グラフ関係
 Fxy 線色 線幅 xfrom xto yfrom yto
 Fxy 線色 線幅 xfrom xto yfrom yto
 Fxy 線色 線幅 xfrom xto yfrom yto
 dx dy eps 遅延1000=1秒、0ならば遅延なし
補助線関係
 X軸目盛刻み X軸位置
 Y軸目盛刻み Y軸位置

⇒ 参照事例:陰関数のグラフ

drawZxy Zxy(x,y)=z の等高線グラフ  先頭に戻る

drawZxy(Zxy, zmin, zmax, dz, lineColor, lineWidth, 
             { xxmin, xxmax, yymin, yymax, 
               xfrom, xto, dx, yfrom, yto, dy.
               eps,
               legend }        
         ) {
   必須パラメータ
     Zxy,                        // 陰関数 Zxy(x,y)=z のzによる等高線
     zmin,zmax,dz,               // 等高線の高さ 
     lineColor, lineWidth,       // 配列あるいはスカラー。ラフ(点)の色と太さ
                                 //   サイズは線数 (zmax-zmin)/zx+1 になるが、スカラーあるいは少ないときは
                                 //   与えた色が繰り返される。
    オプションパラメータ
     xxmin, xxmax, yymin, yymax, // 表の範囲。省略時はグローバル変数の xmin などになる
     xfrom, xto, dx,             // グラフの表示範囲。省略時は xmin,xmax, (xmax-xmin)/100
     yfrom, yto, dy,
     eps,                        // |Zxy - z|<eps で0になったとする。省略時は 0.05
     legend                      // 凡例を表示する場所。HTML内に <div id="xxx"></div> が必要
次の方法でグラフにしているので、テスト以外での利用には限界がある。
    for (var x=xfrom; x<=xto; x=x+dx) {
        for (var y=yfrom; y<=yto; y=y+dy) {
           |Zxy(x,y) - 等高線の値| < eps のとき (x,y) に点を表示
        }
    }
 適切な zmin, zmax, dz を与えるのは困難。試行錯誤する必要がある。
 効率を良くするために、xfrom などの指定により探索範囲を小さくする必要がある。
 dx,dy を大きくすると効率は良くなるが、点の間隔が広がる。
 eps を大きくすると太線になる。小さくすると点が表示されないことがある。
ケース1 xmin等をsetCanvasで与える。オプションなし。
    setCanvas("drawZxyCanvas", "white", 400,400, -2,2, -2,2); // xmin 等をここで与える。
    drawZxy("x*x + y*y - x*y", ["red","green","blue"], 4, {}); // 色は3色の繰返し、太さはすべて同じ
ケース2 一部のパラメタを指定
    setCanvas("drawZxyCanvas", "white", 400,400, -2,2, -2,2); // xmin 等をここで与える。
    drawZxy("x*x + y*y - x*y", 0.5, 2, 0.5, ["red","green","blue"], 4,
        { xfrom:-1, xto:1,          // xの範囲を変更(左右が切れる)
          dx:0.02, dy:0.02,         // 刻みを細かく→連続した曲線に見える
          eps:0.03,                 // 0判定を緩和→点が大きく(線が太く)
          legend:"drawZxy凡例"} );  // 凡例を表示
ケース3 Zxy を変更して作成した模様
    setCanvas("drawZxyCanvas", "white", 400,400, -4,4, -4,4);
    drawZxy("Math.cos(x) + Math.sin(y)", -2, 2, 0.5, ["red","green","blue"], 4,
        { dx:0.01, dy:0.01,
          eps:0.03,
          legend:"drawZxy凡例"} );
ケース4 パラメータを変化させて確認
CANVAS関係
 幅cw 高ch 背景
 XY系範囲 xmin xmax ymin ymax
グラフ関係
 Zxy  zmin zmax dz
 線色
 線幅
 xfrom xto dx  yfrom yto dy  eps
 凡例表示場所
補助線関係
 X軸目盛刻み X軸位置
 Y軸目盛刻み Y軸位置

drawWuv 3次元座標での W(u,v) のグラフ   先頭に戻る


drawWuv(Wuv, umin, umax, du, uAngle, vmin, vmax, dv, vAngle,
       { xxmin, xxmax, yymin, yymax,
         pointcolor, pointsize } );
必須パラメータ
 Wuv.             // w = W(u,v) の式 陽関数を想定
 umin, umax, du,  // uの計算範囲と刻み
 vmin, vmax, dv,
 uAngle, vAngle,  // U軸、V軸の角度。X軸正方向から逆時計回り、ラジアン。W軸はY軸と一致

オプションパラメータ
  xxmin, xxmax, yymin, yymax, // canvasのXY座標系定義。省略時は xmin 等になる
 pointcolor,                 // グラフは点の連続で表示。その点の色(説明後述) 
 pointsize                   // グラフは点の連続で表示。その点の大きさ。省略時は 1

drawWuv の機能

pointcolorの指定

実例

ケース1 オプション指定なし
ケース2 一次元。4端点の色を指定
ケース3 二次元。wの値により色を変える
ケース4 「二次元」に軸を加える
ケース5 「二次元」に軸を加える パラメータを変化させて確認(軸も含む)
CANVAS関係
 横幅cw 高さch  xmin  xmax  ymin  ymax
UVW座標系
  Angle:軸の角度(x軸正側から反時計回りのラジアン)、AxisColor:軸色、Scale:補助線刻み
 umin umax du  uAngle  uAxisColor uScale
 vmin vmax dv  vAngle  vAxisColor vScale
 wAxisColor wScale
グラフ関係
 Wuv = W(u,v)=
 pointsize
 pointcolor
  同一色(スカラー)
  端点指定(一次元)
  w値区分(二次元)

⇒ 参照事例:3次元グラフ


軸、補助線

drawLineYscale 補助線(X軸に平行)目盛りなし  先頭に戻る

drawLineYscale(dy, linecolor, linewidth, zerocolor, zerowidth [,dash, y0]);
  dy: 補助線の刻み幅
  linecolor, linewidth: 補助線の色と太さ
  zerocolor, zerowidth: y0軸の色と太さ
    dash:         補助線細線指定。省略すると実線、実線でy0軸を指定するときは dash="" とする
  y0:          X軸に平行な y = y0 が軸線(太線)になる。省略すると y0=0 になる
ケース1 ymin=-4,ymax= 4、X軸を太線、実線
ケース2 ymin=-4,ymax= 4、X軸を太線、破線
ケース3 ymin=10,ymax=18、y=12を太線、実線
ケース4 ymin=10,ymax=18、y=12を太線、破線

drawLineXscale 補助線(X軸に垂直)目盛りなし   先頭に戻る

drawLineXscale(dx, linecolor, linewidth, zerocolor, zerowidth [,dash, x0]);
  dx: 補助線の刻み幅
  linecolor, linewidth: 補助線の色と太さ
  zerocolor, zerowidth: x=x0軸の色と太さ
    dash:         補助線細線指定。省略すると実線、実線でy0軸を指定するときは dash="" とする
  x0:          X軸に垂直な x = x0 が軸線(太線)になる。省略すると x0=0 になる
ケース1 xmin=-4,xmax= 4、Y軸を太線、実線
ケース2 xmin=-4,xmax= 4、Y軸を太線、破線
ケース3 xmin=10,xmax=18、x=12を太線、実線
ケース4 xmin=10,xmax=18、x=12を太線、破線

drawTextXYscale y=y0軸の下、x=x0軸の左に目盛り(線は引かない)  先頭に戻る

drawTextXYscale(xfrom, xto, dx, yfrom, yto, dy [, color, font, x0, y0]);
  xfrom,xto,dx: X軸の目盛。xfrom から xto まで dx 刻み
  yfrom,yto,dy: Y軸の目盛
   (目盛りは、dx,sy の小数点以下桁数に合わせて四捨五入する))
  color;    数字の色。省略あるいは""のとき black
    font:   数字の太さ。"16px sans-serif"の形式
        省略あるいは""のとき "12px sans-serif"
               数値(12など)のとき "数値px sans-serif"
    x0,y0:  y=x0をX軸,x=y0をY軸として目盛りを付ける
        xfrom,xto  ymin,yman font   x0  y0
ケース1   -4    4    -4   4
ケース2   -4    4    -4   4    16  
ケース3   -4    4    -4   4    "12px fantasy" 
ケース4   10   18    -4   4    ""     12
ケース5   10   18    -4   4    ""     12  1    

drawTextXscale y=y0軸の下に目盛り(線は引かない)  先頭に戻る

drawTextXscale(xfrom, xto, dx [, color, font, y0]) {
    y0:       X軸の平行線 y=y0 の線を軸とする
  xfrom,xto,dx: X軸の目盛。xfrom から xto まで dx 刻み
   (目盛りは、dx の小数点以下桁数に合わせて四捨五入する))
  color;   X軸の目盛の色。省略あるいは""のとき black
    font:  数字の太さ。"16px sans-serif"の形式
        省略あるいは""のとき "16px sans-serif"
              数値(12など)のとき "数値px 16px sans-serif"
        xfrom,xto  dx    color   font  y0
ケース1   -4    4   1
ケース2   -4    4    1    "red"    16  
ケース3   -4    4    0.5  "green" "12px fantasy" 
ケース4   10   18    1    "blue"   16    2

drawTextYscale x=x0軸の左に目盛り(線は引かない)  先頭に戻る

drawTextYscale(yfrom, yto, dy [, color, font, x0]) {
    x0:       X軸の平行線 y=x0 の線を軸とする
  yfrom,yto,dy: X軸の目盛。yfrom から yto まで dy 刻み
   (目盛りは、dy の小数点以下桁数に合わせて四捨五入する))
  color;   X軸の目盛の色。省略あるいは""のとき black
    font:  数字の太さ。"16px sans-serif"の形式
        省略あるいは""のとき "16px sans-serif"
              数値(12など)のとき "数値px 16px sans-serif"
        yfrom,yto  dy    color   font  x0
ケース1   -4    4   1
ケース2   -4    4    1    "red"    16  
ケース3   -4    4    0.5  "green" "12px fantasy" 
ケース4   10   18    1    "blue"   16    2

axisStepFixed 助線や目盛りの刻み幅の自動計算  先頭に戻る

 [step, fixed, point, list] = axisStepFixed(pmin, pmax);
    pmin, pmax  // 軸の範囲 xmin,xmax など
    step        // 補助線や目盛りの刻み幅
    fixed       // 目盛数値の小数点以下の桁数 p.toFixed(fixed) として用いる
    point       // 補助線や目盛りの数
    list        // 各 point のリスト(配列)
     (注:listをキリのよい値にするため、pmin が左側にずらすことがある)
pminpmaxstepfixedpointlist
-22105-2,-1,0,1,2
-44109-4,-3,-2,-1,0,1,2,3,4
0152080,2,4,6,8,10,12,14
-105010013-10,-5,0,5,10,15,20,25,30,35,40,45,50
-0,510,218-0.5,-0.3,-0.1,0.1,0.3,0.5,0.7,0.9
-0,0020.0140,00238-0.002,0,0.002,0.004,0.006,0.008,0.010,0.012,0.014

drawConCircle 同心円補助線  先頭に戻る

drawConCircle(x0,y0, rmin, rmax, dr, linecolor, linewidth, dash);
    x0,y0:        中心点
  rmin,rmax,dr: 補助線半径
点 (-1,1) を中心に半径を1から5まで1刻みの同心円を表示する
    drawConCircle(-1,1, 1,5, 1, "gray", 1, [4.2]);

drawLineRad 放射状補助線  先頭に戻る

drawLineRad(x0,y0, dt, linecolor, linewidth, dash);
    x0,y0:    中心点
  dt:    X軸右側を起点に反時計回り
点 (-1,1) を中心に30度刻みに放射状の補助線を引く
    drawLineRad(-1,1, 30*Math.PI/180, "gray", 1, [4.2]);

drawWuvAxis3次元UVW座標系の軸表示  先頭に戻る


drawWuvAxis(umin, umax, du, uAngle, vmin, vmax, dv, vAngle, dw,  
       { xxmin, xxmax, yymin, yymax,
         uAxisColor, uAxisWidth, uScaleColor, uScaleFont, uLineColor, uLineWidth, uLineDash,
         vAxisColor, vAxisWidth, vScaleColor, vScaleFont, vLineColor, vLineWidth, vLineDash,
         wAxisColor, wAxisWidth, wScaleColor, wScaleFont
       ] );
    (パラメータの意味は、後述「ケース3」の form を参照)
ケース1 オプションなし
  setCanvas("drawWuvAxisCanvas", "white", 400,400, -4,4, -4,4);
    drawWuvAxis(-2, 2, 1, 30*Math.PI/180, -2, 2, 1, 135*Math.PI/180, 1, {} );
ケース2 オプションなし
  setCanvas("drawWuvAxisCanvas", "white", 400,400, -4,4, -4,4);
    drawWuvAxis(-2, 2, 1, 30*Math.PI/180, -2, 2, 1, 135*Math.PI/180, 1,
       { uAxisColor:"red", vAxisColor:"green", wAxisColor:"blue"} );  // 軸の色
ケース3 パラメタ変更による確認
CANVAS関係
 cw= ch=  xmin= xmax= ymin= ymax=
軸・目盛り
最小値最大値刻み角度 軸色軸幅目盛色目盛サイズ 補助線色補助線幅補助線点線
 U軸 uminumaxduuAngle uAxisColoruAxisWidthuScaleColoruScaleFont uLineColoruLineWidthuLineDash
 V軸 vminvmaxdvvAngle vAxisColorvAxisWidthvScaleColorvScaleFont vLineColorvLineWidthvlineDash
 W軸 dw wAxisColorwAxisWidthwScaleColorwScaleFont
ymin ymax Y軸と一致 補助線なし

drawLegend 凡例の表示  先頭に戻る

drawLegend(文字列, 色, 最大文字数, サイズ,
       { フォント, 位置, 枠色, 枠幅, 枠高, 枠端x, 枠端y } );
 必須パラメータ
  文字列   スカラーまたは配列。表示する凡例文。
  色     スカラーまたは配列。文字の色。個数が少ないときは最後の色になる。
  最大文字数 文字列のうち最大の長さの文字数、全角文字は2として数える
        (概数でよい。枠幅を計算するのに必要)
  サイズ  文字の大きさ(px)。すべて同じ大きさになる
 オプションと省略値(すべて不要の場合でも {} と記述する)
  フォント:"sans-serif" 字体
  位置:"右下"            凡例のcanvasでの表示位置(左上、左下、右上、右下)
  枠色:"rgba(0,0,0,0)"  凡例表示矩形内部の色。省略時は透明になり背景のまま
  枠幅:"", 枠高:""    凡例表示矩形(ピクセル)。省略時は次の計算式  
               枠幅 = 0.66 * 最大文字数 * サイズ
               枠高 = サイズ*(列数 + 1)
  枠端x:"", 枠端y:""   凡例表示矩形の右上端の位置 これを与えると「位置」は無視される
ケース1
  一つのグラフの作図をした後に凡例を表示する。
    drawLegend( "x*(x-2)", "red", 13, 20, {枠色:"yellow"} );
ケース2
  複数のグラフの作図した後に凡例を表示する。文字列や色はグラフに合わせた。
    drawLegend( ["x*(x-2)", "x*(x+1)*(x-1)"],  ["red", "blue"], 13, 20, 
          {枠色:"yellow"} );
ケース3パラメタ変更の実験
canvas幅 canvas高 canvas色
文字列[0] 色[0]
文字列[1] 色[1]空白時は上の色
文字列[2] 色[2]
最大文字数(半角換算、概数で可) 文字のサイズ
フォント 位置(左上、左下、右上、右下) 枠色(空白にすると背景のまま)
枠幅 枠高 枠端x 枠端y

支援関数

toXY 座標変換 (w,h)→(x,y)  先頭に戻る

var [x, y] = toXY(w,h [,ccw,cch, xxmin,xxmax, yymin, yymax]);
    w,h:  WH系での座標
  ccw,cch:グローバル変数の cw,ch に相当する値
  xxmin等:グローバル変数の xmin等 に相当する値
   [ ] はすべて省略・指定のいずれかであり、一部を指定することはできない
   [ ] の値を省略したときは、現canvasでの値が用いられる
   [ ] の値を指定してもグローバル変数の値は変化しない 
変換式
    x = (xxmax-xxmin)*w/ccw + xxmin;
    y = (yymin-yymax)*h/cch + yymax;
事前にグローバル変数 cw=400; ch=400; xmin=-4; xmax=4; ymin=-4; ymax=4: が指定されている
ケース1 var [x,y] = toXY(100,200);
ケース2 var [x,y] = toXY(20,30, 100,100, -10,10, -10, 10);
ケース3
ccw cch xxmin xxmax yymin yymax
w h
結果 x y

toWH 座標変換 (x,y)→(w,h)  先頭に戻る

var [w, h] = toWH(x,y [,ccw,cch, xxmin,xxmax, yymin, yymax]);
    x,y:  XY系での座標
  ccw,cch:グローバル変数の cw,ch に相当する値
  xxmin等:グローバル変数の xmin等 に相当する値
   [ ] はすべて省略・指定のいずれかであり、一部を指定することはできない
   [ ] の値を省略したときは、現canvasでの値が用いられる
   [ ] の値を指定してもグローバル変数の値は変化しない 
変換式
    w = Math.round((x-xxmin)/(xxmax-xxmin)*ccw);
    h = Math.round((yymax-y)/(yymax-yymin)*cch);
事前にグローバル変数 cw=400; ch=400; xmin=-4; xmax=4; ymin=-4; ymax=4: が指定されている
ケース1 var [w,h] = toWH(-2,0);
ケース2 var [w,h] = toWH(-6,4, 100,100, -10,10, -10, 10);
ケース3
ccw cch xxmin xxmax yymin yymax
x y
結果 w h

color3a 色表示変換 #rggbb","rgb(r,g,b)", "fgba(r,g.b.a)", #red" → [red, green, blue, alfa]
  先頭に戻る

 [red, green, blue, alfa] = color3a(color); 
  color は "#rggbb","rgb(r,g,b)", "fgba(r,g.b.a)", "red" の形式
色文字列("#rrggbb","rgb(r,g,b)", "fgba(r,g.b.a)") red green blue alfa

 ⇒参照:getColor 色見本

colorHEX 色表示変換 [red, green, blue, alfa] → #rggbb","rgb(r,g,b)", "fgba(r,g.b.a)"
  先頭に戻る

[HEX, a] = colorHEX([red, green, blue, alfa]); 
  HEX は "#rrggbb" の形式, a は透明度
red green blue alfa #rrggbb a

 ⇒参照:getColor 色見本

toRad 角度変換 度数法→ラジアン  先頭に戻る

var rad = toRad(deg);
ケース1 var rad = toRad(90);  
ケース2 下の form に入力
° →結果 ラジアン

toDeg 角度変換 ラジアン→度数法  先頭に戻る

var deg = toDeg(rad);
ケース1 var deg = toDeg(1.571);  
ケース2 下の form に入力
ラジアン →結果 °

rotatePoint 回転移動後の点座標  先頭に戻る

var [x,y] = rotatePoint(x0,y0, x1,y1, angle [,ccw,cch, xxmin,xxmax, yymin, yymax]);
   点P (x0,y0) を中心に、点Q(x1,y1) を反時計回りに angleラジアン回転した点Rの座標を求める
  ccw,cch:グローバル変数の cw,ch に相当する値   xxmin等:グローバル変数の xmin等 に相当する値    [ ] はすべて省略・指定のいずれかであり、一部を指定することはできない    [ ] の値を省略したときは、現canvasでの値が用いられる    [ ] の値を指定してもグローバル変数の値は変化しない 
変換式
    x =   (x1-x0)*Math.cos(angle) + (y1-y0)*Math.sin(angle) + x0;
    y = - (x1-x0)*Math.sin(angle) + (y1-y0)*Math.cos(angle) + y0;
事前にグローバル変数 cw=400; ch=400; xmin=-4; xmax=4; ymin=-4; ymax=4: が指定されている
ケース1 [ ] 省略
 var [x,y] = rotatePoint(1,2, 3,3, 60*Math.PI/180);
ケース2 [ ] 指定
 var [x,y] = rotatePoint(1,2, 3,3, 60*Math.PI/180, 400,400, -4,4, -4,4);
ケース3 下の form 指定
ccw cch xxmin xxmax yymin yymax
x0 y0 x1 y1 angle
結果 x y

symmetryPoint 軸対象の点  先頭に戻る

var [x, y] = symmetryPoint(x0,y0, x1,y1, xa,ya [,ccw,cch, xxmin,xxmax, yymin, yymax]);
  直線 (x0,y0)-(x1,y1) に関して点 (xa, ya) の対称点 (x,y) の座標を求める
  ccw,cch:グローバル変数の cw,ch に相当する値
  xxmin等:グローバル変数の xmin等 に相当する値
   [ ] はすべて省略・指定のいずれかであり、一部を指定することはできない
   [ ] の値を省略したときは、現canvasでの値が用いられる
   [ ] の値を指定してもグローバル変数の値は変化しない 
直線 (x0,y0)-(x1,y1) の勾配を p = (y1-y0)/(x1-x0) とすると
  直線 (x0,y0)-(x1,y1) の式:    y = p(x-x0) + y0
  これに直交し点 (xa,ya) を通る式: y= (-1/p)(x-xc) + ya
この交点 (xc,yc) は
  xc = (xa/p + px0  + ya- y0) / (p + 1/p)
  yc = p(xc-x0) + y0
(xc,yc) は (xa,ya)-(x,y) の中点なので、
  x = 2xc - xa
  y = 2yc - ya
事前にグローバル変数 cw=400; ch=400; xmin=-4; xmax=4; ymin=-4; ymax=4: が指定されている
ケース1 [ ] 省略
 var [x,y] = symmetryPoint(1,2, 3,3, 2,1);
ケース2 [ ] 指定
 var [x,y] = symmetryPoint(1,2, 3,3, 2,1, 400,400, -4,4, -4,4);
ケース3 下の form 指定
ccw cch xxmin xxmax yymin yymax
x0 y0 x1 y1 xa ya
結果 x y

UVWtoXY 3次元座標(u,v,w) の2次元座標(x,y)への射影  先頭に戻る

[x,y] = UVWtoXY(u,v,w, au, av);
    u,v,w   // 3次元座標系(UVW座標系での位置)
    au, av  // u軸、v軸のX軸正方向からの逆時計回り角度(ラジアン)、W軸はY軸と一致
    x,y     // XY座標系での位置  
公式
    var x = u*Math.cos(au) + v*Math.cos(av);
    var y = u*Math.sin(au) + v*Math.sin(av) + w;
u v w au av x y

図解(数値を変えて確認)

CANVS関係
 横幅cw 高さch  xmin  xmax  ymin  ymax UVW系での座標
 u v w
u軸、v軸の角度(x軸正側から反時計回りのラジアン)
 u軸角度au= v軸角度av=
頂点のXY座標
 (0,0,0)x y  (0,0,w)x y  (u,0,0)x y  (u,0,w)x y
 (0,v,0)x y  (0,v,w)x y  (u,v,0)x y  (u,v,w)x y←求める座標


特殊な機能

clickCanvas クリックした位置と色の表示  先頭に戻る

clickCanvas(canvas名, 結果表示場所);
既に作成されているcanvasの画面をクリックすると、その位置と色を表示する。
  対象 canvas は HTML に表示されているものなら、直前に作成したものでなくてもよい。
  その結果を呼出側に変数としてとりだすことはできない。
  HTML に <div id="clickCanvas結果表示場所"></div> と記述しておく必要がある(名称は任意)。
  出力形式 w=118, h=122, x=-1.64, y=1.56, r=255, g=170, b=0, a=0.8。
  クリックするたびに結果が追加される。
クリック効果を打ち切るとき
  HTML に次のボタンを設定しておく。このボタンをクリックすると打ち切られる。
  <button onClick="clickCanvas('終了')">クリック終了</button>
  いったん打ち切った効果を再開することはできない。