using MetroGauges.General; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; namespace MetroGauges.Model { public class LiEquiModel : DataModel { /// /// 所在位置 /// public override PositionII Position2 { get { if (StrPosition == "受电弓") { return PositionII.Pantograph; } else if (StrPosition == "车体顶部") { return PositionII.TopBody; } else if (StrPosition == "车体底架边梁以上") { return PositionII.UpChassis; } else if (StrPosition == "车体底架边梁及以下") { return PositionII.LowChassis; } else if (StrPosition == "转向架") { return PositionII.Bogie; } else if (StrPosition == "车下轨内吊挂") { return PositionII.InnerBodyHanger; } else if (StrPosition == "车下轨外吊挂") { return PositionII.InnerBodyHanger; } else if (StrPosition == "轮对") { return PositionII.Wheelset; } //else if (StrPosition == "车下轨内") //{ // return PositionII.InnerOthers; //} //else if (StrPosition == "车下轨外") //{ // return PositionII.InnerOthers; //} else { return PositionII.INVAIL; } } } private static double δX_a; private static double δY_a; private static double δY_b; private static double δX_c; private static double δX_d; private static double δY_d; private static double δX_e; private static double δY_e; private static double δX_f; private static double δY_f; private static double δY_g; /// /// 受电弓 /// public double ΔX_a { get => δX_a; set { δX_a = value; OnPropertyChanged(); } } /// /// 受电弓 /// public double ΔY_a { get => δY_a; set { δY_a = value; OnPropertyChanged(); } } /// /// 车顶 /// public double ΔY_b { get => δY_b; set { δY_b = value; OnPropertyChanged(); } } /// /// 底架边梁以上 /// public double ΔX_c { get => δX_c; set { δX_c = value; OnPropertyChanged(); } } /// /// 底架边梁及以下 /// public double ΔX_d { get => δX_d; set { δX_d = value; OnPropertyChanged(); } } /// /// 底架边梁及以下 /// public double ΔY_d { get => δY_d; set { δY_d = value; OnPropertyChanged(); } } /// /// 转向架 /// public double ΔX_e { get => δX_e; set { δX_e = value; OnPropertyChanged(); } } /// /// 转向架 /// public double ΔY_e { get => δY_e; set { δY_e = value; OnPropertyChanged(); } } /// /// 车下吊挂 /// public double ΔX_f { get => δX_f; set { δX_f = value; OnPropertyChanged(); } } /// /// 车下轨外吊挂 /// public double ΔY_f { get => δY_f; set { δY_f = value; OnPropertyChanged(); } } /// /// 车下轨内吊挂 /// public double ΔY_g { get => δY_g; set { δY_g = value; OnPropertyChanged(); } } ///// ///// 车下轨内 ///// //private static double δY_h; //public double ΔY_h { get => δY_h; set { δY_h = value; OnPropertyChanged(); } } ///// ///// 车下轨外 ///// //private static double δY_i; //public double ΔY_i { get => δY_i; set { δY_i = value; OnPropertyChanged(); } } public LiEquiModel() { } public LiEquiModel(string strPosition, string name, double x, double y) { StrPosition = strPosition; Name = name; X = x; Y = y; } /// /// 直线设备限界-偏移x偏移值 /// /// /// /// /// /// /// public double X_(double x1, double y1, double x2, double y2, double C) { if (y1 == y2) return 0; else return C / Math.Sqrt(1 + (x2 - x1) * ((x2 - x1)) / ((y2 - y1) * (y2 - y1))); } /// /// 直线设备限界-偏移y偏移值 /// /// /// /// /// /// /// public double Y_(double x1, double y1, double x2, double y2, double C) { if (y1 == y2) { return C; } else { return Math.Abs((x2 - x1) / (y2 - y1)) * C / Math.Sqrt(1 + (x2 - x1) * ((x2 - x1)) / ((y2 - y1) * (y2 - y1))); } } /// /// 交点横坐标 /// /// /// /// /// /// /// /// /// /// public double x0(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { double x_0, y_0, x_1, y_1; x_0 = (y2 - y1) / (x2 - x1); //a1 y_0 = -(x1 * y2 - x2 * y1) / (x2 - x1); //b1 x_1 = (y4 - y3) / (x4 - x3); //a2 y_1 = -(x3 * y4 - x4 * y3) / (x4 - x3); //b2 return (y_1 - y_0) / (x_0 - x_1); } /// /// 交点纵坐标 /// /// /// /// /// /// /// /// /// /// public double y0(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { double x_0, y_0, x_1, y_1; x_0 = (y2 - y1) / (x2 - x1); //a1 y_0 = -(x1 * y2 - x2 * y1) / (x2 - x1); //b1 x_1 = (y4 - y3) / (x4 - x3); //a2 y_1 = -(x3 * y4 - x4 * y3) / (x4 - x3); //b2 return (x_0 * y_1 - x_1 * y_0) / (x_0 - x_1); } /// /// 偏移x偏移值 /// /// /// /// /// /// /// public double ΔX(double x1, double y1, double x2, double y2, double C) { if (y1 == y2) return 0; else { double θ = Math.Atan(Math.Abs((y2 - y1) / (x2 - x1))); return C * Math.Sin(θ); } } /// /// 偏移y偏移值 /// /// /// /// /// /// /// public double ΔY(double x1, double y1, double x2, double y2, double C) { if (y1 == y2) { return C; } else { double θ = Math.Atan(Math.Abs((y2 - y1) / (x2 - x1))); return Math.Abs((x2 - x1) / (y2 - y1)) * C * Math.Sin(θ); } } public static LiEquiModel Copy(LiEquiModel lieq) { return new LiEquiModel(lieq.StrPosition, lieq.Name, lieq.X, lieq.Y); } } }