private void InitNew() { var methods = _instance.GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance).Where((x) => x.Name.StartsWith("_")); _reflectionCache.Add(typeof(T), methods); _enumCache.Add(typeof(T), Enum.GetValues(typeof(T))); foreach (var state in _enumCache[typeof(T)]) { var stateMethods = methods.Where((x) => x.Name.Contains(state.ToString())); var stateFunctions = new StateFunctions(); foreach (var method in stateMethods) { var name = method.Name; if (name.EndsWith("_Enter")) { stateFunctions.Enter = method; } else if (name.EndsWith("_Update")) { stateFunctions.Update = method; } else if (name.EndsWith("_Exit")) { stateFunctions.Exit = method; } } _stateFunctionLookup[(T)state] = stateFunctions; } }
private void InitCached() { var methods = _reflectionCache[typeof(T)]; foreach (var state in _enumCache[typeof(T)]) { var stateMethods = methods.Where((x) => x.Name.Contains(state.ToString())); var stateFunctions = new StateFunctions(); foreach (var method in stateMethods) { var name = method.Name; if (name.EndsWith("_Enter")) { stateFunctions.Enter = method; } else if (name.EndsWith("_Update")) { stateFunctions.Update = method; } else if (name.EndsWith("_Exit")) { stateFunctions.Exit = method; } } _stateFunctionLookup[(T)state] = stateFunctions; } }
//public IAdaptiveQ AdaptiveQ { get; set; } //public IAdaptiveR AdaptiveR { get; set; } //public int Size { get { return Q.ColumnCount; } } public DiscreteInnerWrapper(double[] measurementnoise, double[] processnoise) { KalmanFilter = DiscreteFactory.Build(processnoise.Length); R = MatrixBuilder.Instance.Builder.Diagonal(measurementnoise).Map(_ => Math.Pow(_, 2)); //covariance of measurement Q = MatrixBuilder.Instance.Builder.Diagonal(processnoise).Map(_ => Math.Pow(_, 2)); //covariance of process //AdaptiveQ = new DefaultAdaptiveQ(q); //AdaptiveR = new DefaultAdaptiveR(r); F = StateFunctions.BuildTransition(processnoise.Length); G = MatrixBuilder.Instance.Builder.Diagonal(processnoise.Length, processnoise.Length, 1); //covariance of process H = StateFunctions.BuildMeasurement(processnoise.Length, measurementnoise.Length); }
/// <summary> /// フォームを読み込む /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MainForm_Load(object sender, EventArgs e) { state = new StateFunctions(this); }