セージ の メモ書き

メモこそ命の恩人だ

C# - サイン/コサイン/タンジェント/アークタンジェント

三角関数

三角関数 - Wikipedia

  • 直角三角形の "角度" と "辺長の割合" の関係を表す関数。
  • 三角比とも呼ばれる。
  • 関数の違いにより、辺の要素が異なる。(以下、一部)

    関数名 内容 公式
    sin sine (正弦) sinθ = c / b
    cos cosine (余弦) cosθ = c / a
    tan tangent (正接) tanθ = a / b

Math.Sin メソッド

Math.Sin(Double) メソッド (System) | Microsoft Docs

  • 指定角度のサインを取得できる。
  • 角度の単位はラジアンである。

「y = sinθ」をプロットしてみる。グラフ表示は以下を参照。

https://soseiji-memo.hatenablog.com/entry/chart

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="300" Width="600"
        xmlns:visualization="clr-namespace:System.Windows.Forms.DataVisualization.Charting;assembly=System.Windows.Forms.DataVisualization">
    <WindowsFormsHost>
        <visualization:Chart x:Name="Chart1" />
    </WindowsFormsHost>
</Window>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        
        // グラフ表示(サイン)
        PlotChart(value => Math.Sin(value));
    }

    public void PlotChart(Func<double, double> func)
    {
        var chartArea = new ChartArea();
        chartArea.AxisX.Title = "θ [rad]";
        chartArea.AxisY.Title = "y = Func(θ)";
        chartArea.AxisX.Minimum = -10;
        chartArea.AxisX.Maximum = 10;
        chartArea.AxisY.Minimum = -1;
        chartArea.AxisY.Maximum = 1;
        chartArea.AxisX.Interval = 2.0;
        this.Chart1.ChartAreas.Add(chartArea);

        var series = new Series { ChartType = SeriesChartType.Line };
        foreach (var point in CreatePointList(func).ToList())
        {
            series.Points.AddXY(point.X, point.Y);
        }
        this.Chart1.Series.Add(series);
    }

    public IEnumerable<Point> CreatePointList(Func<double, double> func)
    {
        foreach (var value in Enumerable.Range(-100, 200).Select(x => x / 10.0))
        {
            yield return new Point(x: value, func(value));
        }
    }
}

Math.Cos メソッド

Math.Cos(Double) メソッド (System) | Microsoft Docs

  • 指定角度のコサインを取得できる。
  • 角度の単位はラジアンである。

「y = cosθ」をプロットしてみる。コードは前述を参照。

PlotChart(value => Math.Cos(value));

Math.Tan メソッド

Math.Tan(Double) メソッド (System) | Microsoft Docs

「y = tanθ」をプロットしてみる。コードは前述を参照。

PlotChart(value => Math.Tan(value));

Y軸の表示範囲を広げると、以下のグラフが表示された。
数学上、例えば θ=π/2 に近づくと y=∞ になる。
プロットの描画間隔がさらに小さければ、理論通りのグラフに近づくはず。

描画間隔の精度を良くしてみた。だいぶ良い感じ。

Math.Atan メソッド

Math.Atan(Double) メソッド (System) | Microsoft Docs

上図の描画方法について

https://soseiji-memo.hatenablog.com/entry/sin-cos-tan

// [ ラジアン -> 度 ] 変換
PlotChart(value => Math.Atan(value) * (180 / Math.PI));



以上