private void ApplyModel(List<double> model, SequencedTrack sTrack) { List<double> inverted = new List<double>(); int minus = 1; for (int i = model.Count - 1; i >= 0; i--) { inverted.Add(minus * model[i]); minus *= -1; } TrackItem[] items = sTrack.Track.TrackItems; int iLen=items.Length; for (int i = 0; i < iLen; i += 2) { double res = 0; for (int j = 0; j < inverted.Count; j++) res += inverted[j] * items[(i + j) % iLen].Latitude; if (Math.Abs(res) < 0.0001) { sTrack.AddSequence(i, model.Count,model.Count); sTrack.AddSequence((i + 1) % iLen, model.Count,model.Count); } } }
public SequencedTrack SequenceTrack(Track track) { curLen = Parameters[0].IntegerValue; minDist = Parameters[1].IntegerValue; List<MatchCount> seqList = new List<MatchCount>(); SequencedTrack seqTrack = new SequencedTrack(track, "Прямой поиск"); for (int i = 0; i < track.TrackItems.Length - curLen - 1; i++) { List<TrackItem> matches = new List<TrackItem>(); for (int j = 0; j < track.TrackItems.Length - curLen; j++) { if (Compare(track, i, j)) seqTrack.AddSequence(i, j + 1, curLen); } } return seqTrack; }