using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FLY.Thick.Base.Common { public class CurveCore { #region ICurveService 成员 public CurveType Flag; public List Curves; public event PropertyChangedEventHandler PropertyChanged; public void SetRevised() { for (int i = 0; i < Curves.Count(); i++) { Curves[i].AD = Curves[i].RevisedAD; } } #region E int AD2Value_E(int ad, AD2ValueFlag flag) { int i; int thick; if (Curves.Count < 1) return -1; if (ad < 0) return -1; if (ad == 0) ad = 1; if (flag == AD2ValueFlag.NoRevised) { for (i = 0; i < Curves.Count; i++) { if (ad < Curves[i].AD) continue; else break; } } else { for (i = 0; i < Curves.Count; i++) { if (ad < Curves[i].RevisedAD) continue; else break; } } if (i >= Curves.Count) i = Curves.Count - 1; if (i == 0) i = 1; if (flag == AD2ValueFlag.NoRevised) { double adi_ad0 = Math.Log(Curves[i].AD) - Math.Log(Curves[i - 1].AD); double vi_v0 = Curves[i].Value - Curves[i - 1].Value; double a = vi_v0 / adi_ad0; double b = Curves[i - 1].Value - Math.Log(Curves[i - 1].AD) * a; thick = (int)(Math.Log(ad) * a + b); //double u; //u = Math.Log((double)Curves[i - 1].AD / Curves[i].AD, Math.E) * 100 / (Curves[i].Value - Curves[i - 1].Value); //thick = (int)(Math.Log((double)Curves[i - 1].AD / ad, Math.E) * 100 / u + Curves[i - 1].Value); } else { double adi_ad0 = Math.Log(Curves[i].RevisedAD) - Math.Log(Curves[i - 1].RevisedAD); double vi_v0 = Curves[i].Value - Curves[i - 1].Value; double a = vi_v0 / adi_ad0; double b = Curves[i - 1].Value - Math.Log(Curves[i - 1].RevisedAD) * a; thick = (int)(Math.Log(ad) * a + b); //double u; //u = Math.Log((double)Curves[i - 1].RevisedAD / Curves[i].RevisedAD, Math.E) * 100 / (Curves[i].Value - Curves[i - 1].Value); //thick = (int)(Math.Log((double)Curves[i - 1].RevisedAD / ad, Math.E) * 100 / u + Curves[i - 1].Value); } //if (thick < 0) // return 0; return thick; } #endregion #region 线性 int AD2Value_Line(int ad, AD2ValueFlag flag) { int i; int thick; if (Curves.Count < 2) return -1; if (ad < 0) return -1; if (ad == 0) ad = 1; bool isDescending = true;//降序排列 if (Curves[0].AD < Curves[1].AD) isDescending = false; //找 ad0 Curves[i].AD) continue; else break; } } if (i >= Curves.Count) i = Curves.Count - 1; if (i == 0) i = 1; double adi_ad0 = Curves[i].AD - Curves[i - 1].AD; double vi_v0 = Curves[i].Value - Curves[i - 1].Value; double a = vi_v0 / adi_ad0; double b = Curves[i - 1].Value - Curves[i - 1].AD * a; thick = (int)(ad * a + b); return thick; } else { if (isDescending)//降序排列 { for (i = 0; i < Curves.Count; i++) { if (ad < Curves[i].RevisedAD) continue; else break; } } else { for (i = 0; i < Curves.Count; i++) { if (ad > Curves[i].RevisedAD) continue; else break; } } if (i >= Curves.Count) i = Curves.Count - 1; if (i == 0) i = 1; double adi_ad0 = Curves[i].AD - Curves[i - 1].RevisedAD; double vi_v0 = Curves[i].Value - Curves[i - 1].Value; double a = vi_v0 / adi_ad0; double b = Curves[i - 1].Value - Curves[i - 1].RevisedAD * a; thick = (int)(ad * a + b); return thick; } } #endregion public int AD2Value(int ad, AD2ValueFlag flag) { switch (Flag) { case CurveType.Line: return AD2Value_Line(ad, flag); default: return AD2Value_E(ad, flag); } } #endregion } }