//--------------------------------------------------------------
//	一次 IIR フィルタの振幅特性の描画
//		y[n] = a*y[n-1] + b*x[n], -1 < a < 1
//
//		作成者：三上直樹，2022/11/17 作成，ⓒ三上直樹 2022
//--------------------------------------------------------------

using System;
using System.Windows.Forms;
using Mikami.WindowsApplication;


namespace IIRフィルタ1次_振幅特性
{
	public partial class Form1 : Form
	{
		private readonly float dpiFactor_;
		private readonly float Y0_; 
		private readonly float DX_;				// 標本化周波数/10 に対応するピクセル数
		private readonly float DY_;				// 10 dB に対応するピクセル数

		private double a1_;
		
		public Form1()
		{
			InitializeComponent();


			// 異なる DPI のシステムに対応するスケール変換の係数を取得
			dpiFactor_ = CreateGraphics().DpiX/96.0f;

			Y0_ = pictureBox1.Height/20.0f;
			DX_ = (pictureBox1.Width-1)/5.0f;
			DY_ = (pictureBox1.Height-1-Y0_)/6.0f;

			FormCloseConfirm.Set(this);		// 終了時に確認できるようにする
		}

		// 終了
		private void button1_Click(object sender, EventArgs e)
		{
			Close();
		}

		// a の読み取りと，対応する振幅特性の描画指令
		private void trackBar1_Scroll(object sender, EventArgs e)
		{
			a1_ = 0.01*trackBar1.Value;
			if (a1_ >=  1.0) a1_ =  0.999;
			if (a1_ <= -1.0) a1_ = -0.999;
			label7.Text = "= " + a1_.ToString("0.00#");
			pictureBox1.Invalidate();
		}

		// 入力波形の描画指令
		private void pictureBox1_Paint(object sender, PaintEventArgs e)
		{
			DrawAxis(e.Graphics);	// 目盛と座標軸の描画
			DrawHz(e.Graphics);		// 振幅特性の描画
		}

		// 座標軸の目盛値やタイトルの描画の指令
		private void pictureBox2_Paint(object sender, PaintEventArgs e)
		{
			DrawGraphStringt(e.Graphics);
		}

		// 係数の切替えに対応するため
		private void radioButton1_Click(object sender, EventArgs e)
		{
			pictureBox1.Invalidate();
		}
	}
}
