public override InterpXY GetInterpSignal(IEnumerable <double> pointsTime) { var res = new InterpXY(); InterpHz = GenerateNewHzFunct || InterpHz == null?s_rnd.GetInterp(pointsTime.Min(), pointsTime.Max()) : InterpHz; foreach (var t in pointsTime) { res.Add(t, GetAmp(t, InterpHz[t])); } return(res); }
private void button3_Click(object sender, RoutedEventArgs e) { var vm = DataContext as MainViewModel; vm.Model1.Series.Clear(); var rndF = new RndFunction(t => Math.Cos(t), t => Math.Sin(t) / 5, 0.01, 0.01); for (int i = 0; i < 1; i++) { var ser = new LineSeries(); foreach (var point in rndF.GetInterp(0, 10).Points()) { ser.Points.Add(new DataPoint(point.X, point.Y)); } vm.Model1.Series.Add(ser); } vm.Model1.InvalidatePlot(false); }
public void SynchModels(double resizeMnozj, double cameraHz, double dcameraHz) { Coords = GetTrueCoordsList(resizeMnozj); if (Signals.Count != 4) { throw new Exception("Загрузи сигналы!"); } var timeMaxSeq = from crds in Coords select crds.X.Data.Keys.Max(); var timeMax = timeMaxSeq.Max(); double t_shagAver = 0.5 / (cameraHz - dcameraHz) + 0.5 / (cameraHz + dcameraHz); double delta_shag = 0.5 / (cameraHz - dcameraHz) - 0.5 / (cameraHz + dcameraHz); TimeMoments = new List <double>((int)(timeMax * (cameraHz + dcameraHz) + 7)); var rndFunct = new RndFunction(t => t, 0, t_shagAver, delta_shag); var timeInterp = rndFunct.GetInterp(0, timeMax); TimeMoments = new List <double>(timeInterp.Data.Keys); SignalsInterp = new List <InterpXY>(4); for (int i = 0; i < 4; i++) { Signals[i].Reset(); SignalsInterp.Add(Signals[i].GetInterpSignal(TimeMoments)); } ReceivedPoints = new List <List <Vector?> >(TimeMoments.Capacity); for (int i = 0; i < TimeMoments.Count; i++) { ReceivedPoints.Add(new List <Vector?>(4)); for (int j = 0; j < 4; j++) { if (SignalsInterp[j][TimeMoments[i]] > 0.1) { ReceivedPoints[i].Add(Coords[j].Getpoint(TimeMoments[i])); } else { ReceivedPoints[i].Add(null); } } } var trp = ReceivedPoints. Select(lv => { var notNull = lv.Where(v => v.HasValue).Select(v => v.Value).ToList(); var distMatr = new bool[notNull.Count, notNull.Count]; for (int i = 0; i < notNull.Count; i++) { for (int j = i + 1; j < notNull.Count; j++) { distMatr[i, j] = (notNull[i] - notNull[j]).Length < UnityRadius; distMatr[j, i] = distMatr[i, j]; } } var alreadyUnityP = new List <int>(notNull.Count); var res = new List <Vector>(4); for (int i = 0; i < notNull.Count; i++) { if (alreadyUnityP.Contains(i)) { continue; } var closeP = new List <int>(notNull.Count); Action <int> recurce = null; recurce = new Action <int>((nearMe) => { closeP.Add(nearMe); for (int k = 0; k < notNull.Count; k++) { if (distMatr[nearMe, k] && !closeP.Contains(k)) { recurce(k); } } }); recurce(i); alreadyUnityP.AddRange(closeP); alreadyUnityP = alreadyUnityP.Distinct().ToList(); if (closeP.Count > 2) { int ss = 1; } //var resP = notNull[closeP[0]]; //for(int j = 1; j< closeP.Count; j++) { // resP += notNull[closeP[j]]; //} //resP /= closeP.Count + 1; var resP = closeP.Aggregate(new Vector(), (vec, k) => vec += notNull[k], (vec) => vec /= closeP.Count); res.Add(resP); } return(res); }); ReceivedPointsTrue = new List <List <Vector> >(TimeMoments.Capacity); foreach (var rp in trp) { ReceivedPointsTrue.Add(rp); } RedrawModel4(); }