C#でグラフ描画(Visual Studio2017)

今回はC#とVisual Studio2017を使ってグラフの描画をしてみます。

1. プロジェクトの作成

Visual Studio2017を起動して、ファイル(F) > 新規作成(N) > プロジェクト(P) 

Visual C#Windowsフォームアプリケーションを選択してプロジェクトを作成。
f:id:mkmokymh:20170827113536p:plain
 

2. Chartの追加

画面左端のツールボックスをクリックしてデータ>Chartをダブルクリック。
f:id:mkmokymh:20170827113522p:plain

するとForm1.cs[デザイン]がこんな風に表示される。
f:id:mkmokymh:20170827113234p:plain

直感的にウィンドウの大きさを変えられるので適当にサイズを変えておいてください。

 

3. sin,cos波を表示させてみる。

このサイトを参考にさせていただき、sin,cos波を表示させてみる。


C#でグラフを描く(Chartコントロールによる方法) - whoopsidaisies's diary

 

まずForm1.cs[デザイン]のグラフをダブルクリック。するとForm1.csが開く。

クラスの中にコードを追加。コードの意味は上の参考サイトを御覧ください。

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void chart1_Click(object sender, EventArgs e)
        {
            
        }

        //written by whoopsidaisies
        private void PlotSinCos()
        {
            // 1.Seriesの追加
            chart1.Series.Clear();
            chart1.Series.Add("sin");
            chart1.Series.Add("cos");

            // 2.グラフのタイプの設定
            chart1.Series["sin"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
            chart1.Series["cos"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;

            // 3.座標の入力
            for (double theta = 0.0; theta <= 2 * Math.PI; theta += Math.PI / 360)
            {
                chart1.Series["sin"].Points.AddXY(theta, Math.Sin(theta));
                chart1.Series["cos"].Points.AddXY(theta, Math.Cos(theta));
            }
        }
    }
}

そうしたら次にForm1()にPlotSinCos()を記入します。

public Form1()
{
    InitializeComponent();
    PlotSinCos();
}

この状態で緑色三角の開始ボタンを押してみてください。ビルトして実行されます。
このようなウィンドウが出ていれば成功です。
f:id:mkmokymh:20170827113203p:plain

4. 自分が知りたい関数のグラフを記入する。

今回私が知りたいのは、x=n*cos(t)+cos(n*t),y=n*sin(t)+sin(n*t) のグラフです。
同じクラス内にnとtの値を渡したらそれぞれx,yが返る関数を作ります。

//written by whoopsidaisies
private void PlotSinCos()
{
    // 1.Seriesの追加
    chart1.Series.Clear();
    chart1.Series.Add("test");

    // 2.グラフのタイプの設定
    chart1.Series["test"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;

    // 3.座標の入力
    for (double theta = 0.0; theta <= 2 * Math.PI; theta += Math.PI / 360)
    {
        chart1.Series["test"].Points.AddXY(Keisan(2,theta,0), Keisan(2,theta,1)); //書き換え
    }
}

//関数を追加
private double Keisan(double n, double t, int selectXY)
{
    double x, y;

    x = n * Math.Cos(t) + Math.Cos(n * t);
    y = n * Math.Sin(t) + Math.Sin(n * t);

    return (selectXY == 0) ? x : y;
}

ビルトして実行するとこんな形に。
f:id:mkmokymh:20170827113038p:plain