JavaScript/Math/tan

カテゴリ:Book:JavaScript#Math/tan%20

Math.tan(x) は、引数 x の正接(タンジェント)を返します。ここで、x はラジアン単位で指定されます[1]

  • 引数 xNaN の場合、NaN を返します。
  • 引数 x+0 または -0 の場合、x をそのまま返します。
  • 引数 xInfinity または -Infinity の場合、NaN を返します。
  • 引数 xπ/2 + nπn は整数)の場合、Infinity または -Infinity を返します。

正接を計算するプログラム

以下のプログラムは、ユーザーが入力した角度(度単位)の正接を計算します。

const f = p => {
  for (;;) {
    a = prompt(`${p}は何度ですか?`);
    if (!isNaN(a))
      return a;
    alert(`${p}に、入力ミスがあります。 "${a}"`);
  }
}

for (;;) {
  const degrees = f("角度");
  const radians = degrees * Math.PI / 180;
  const tangent = Math.tan(radians);
  if (!isNaN(tangent)) {
    alert(`${degrees}度の正接は ${tangent.toFixed(3)} です。`);
    break;
  }
  alert("入力が大きすぎます。");
}

このプログラムでは、Math.tan を使用して角度の正接を計算しています。ユーザーが入力した角度が NaNInfinity の場合、適切に処理されます。

正接関数のグラフを描画するプログラム

以下のプログラムは、正接関数のグラフを描画します。

const canvas = document.createElement('canvas');
document.body.appendChild(canvas);
const ctx = canvas.getContext('2d');
canvas.width = 800;
canvas.height = 400;

const amplitude = 100;
const frequency = 1;
const phase = 0;
const yOffset = canvas.height / 2;

ctx.beginPath();
ctx.moveTo(0, yOffset);

for (let x = 0; x < canvas.width; x++) {
  const radians = (x / canvas.width) * 4 * Math.PI * frequency + phase;
  const y = yOffset - amplitude * Math.tan(radians);
  if (isFinite(y)) {
    ctx.lineTo(x, y);
  } else {
    ctx.moveTo(x, yOffset);
  }
}

ctx.strokeStyle = 'blue';
ctx.lineWidth = 2;
ctx.stroke();

このプログラムでは、Math.tan を使用して正接関数のグラフを描画しています。amplitude は振幅、frequency は周波数、phase は位相を表します。

注意点

  • ラジアン単位: Math.tan はラジアン単位で角度を受け取るため、度単位の角度をラジアンに変換する必要があります。
  • 無限大の値: Math.tan は、π/2 + nπn は整数)の角度で無限大の値を返します。このため、グラフ描画時に無限大の値を適切に処理する必要があります。
  • 精度: 浮動小数点演算の特性上、Math.tan の結果には微小な誤差が含まれることがあります。

脚註

  1. これは、数学的には単位円上の角度 x に対応する点のy座標とx座標の比を返します。

外部リンク

カテゴリ:Book:JavaScript#Math/tan%20 カテゴリ:JavaScript
カテゴリ:Book:JavaScript カテゴリ:JavaScript カテゴリ:Pages using the JsonConfig extension