private void Spline_Click(object sender, RoutedEventArgs e) { CubicSplineInterpolation csi = new CubicSplineInterpolation(); csi.ShowDialog(); }
static void Interpolation(string path) { //n, k 값을 보간하기 위해 #region 물성값 파일 읽어오기 string[] LoadingData; // 물성값 데이터 저장할 배열. (한 줄씩 저장) string[] ColumnData; // 물성 데이터를 임시로 저장할 배열. LoadingData = File.ReadAllLines(path); int LoopNum = LoadingData.Length; double[] wavelength = new double[LoopNum - 1]; double[] n = new double[LoopNum - 1]; double[] k = new double[LoopNum - 1]; // 데이터의 첫번째 줄은 column 명이다. // 이를 제외하기 위해 반복문을 1부터 시작한다. int StartIndex = 1; char[] DelimiterChars = { ' ', '\t', '\n', ',' }; for (int i = StartIndex; i < LoopNum; i++) { // Split한 데이터를 ColumnData에 저장한다. ColumnData = LoadingData[i].Split(DelimiterChars, StringSplitOptions.RemoveEmptyEntries); // 각 컬럼에 해당하는 데이터를 저장한다. wavelength[i - 1] = double.Parse(ColumnData[0]); n[i - 1] = double.Parse(ColumnData[1]); k[i - 1] = double.Parse(ColumnData[2]); } #endregion #region 기준이 될 측정 스펙트럼 파일 읽어오기 // 2nm_on_si 스펙트럼 기준 string[] SpectrumData; // 측정 스펙트럼 데이터 저장할 배열. (한 줄씩 저장) string[] StdWavelength; // 기준이 될 wavelength 값 저장할 배열 SpectrumData = File.ReadAllLines("SiO2 2nm_on_Si_new.dat"); int DataNum = SpectrumData.Length; double[] Abscissa = new double[DataNum - 1]; for (int i = StartIndex; i < DataNum; i++) { // Split한 데이터를 StdWavelength에 저장한다. StdWavelength = SpectrumData[i].Split(DelimiterChars, StringSplitOptions.RemoveEmptyEntries); // wavelength에 해당하는 데이터를 저장한다. Abscissa[i - 1] = double.Parse(StdWavelength[0]); } //350~1000까지 간격 1nm //double[] Abscissa = new double[631]; //for (int i = 0; i < 631; i++) //{ // Abscissa[i] = 350 + i; //} #endregion //보간 CubicSplineInterpolation CS_n = new CubicSplineInterpolation(wavelength, n); CubicSplineInterpolation CS_k = new CubicSplineInterpolation(wavelength, k); #region new.txt 파일로 저장 if (path == "SiO2_nm.txt") { path = "SiO2_new.txt"; //path = "SiO2_new2.txt"; } else if (path == "Si_nm.txt") { path = "Si_new.txt"; //path = "Si_new2.txt"; } else if (path == "SiN.txt") { path = "SiN_new.txt"; //path = "SiN_new2.txt"; } using (StreamWriter NewInterpolationFile = new StreamWriter(path)) { // 컬럼 명 쓰기. NewInterpolationFile.WriteLine( $"wavelength(nm)\t" + $"n\t" + $"k"); // 스펙트럼 데이터 쓰기. foreach (double axis in Abscissa) { Console.WriteLine(axis + "\t" + CS_n.Interpolate(axis) + "\t" + CS_k.Interpolate(axis)); NewInterpolationFile.WriteLine(axis + "\t" + CS_n.Interpolate(axis) + "\t" + CS_k.Interpolate(axis)); } } #endregion }