protected static IRuleSystem CreateModel(IEnumerable <Packet> trainPackets) { var trainObj = Factory.ParseToHyperbox(trainPackets); var bvolume = new AABB(trainObj); _progress = new List <long[]>(); var duration = new Stopwatch(); duration.Start(); do { duration.Stop(); _progress.Add(new[] { bvolume.Collisions, bvolume.Objects.Count, duration.ElapsedMilliseconds }); duration.Restart(); Debug.WriteLine("#{0}: {1} collisions ({2} boxes)", _progress.Count, bvolume.Collisions, bvolume.Objects.Count); bvolume.DetectCollision(); } while (bvolume.Collisions > 0); duration.Stop(); _progress.Add(new[] { bvolume.Collisions, bvolume.Objects.Count, duration.ElapsedMilliseconds }); var rules = new BoxRuleSystem(bvolume.Objects); //var rules = new RangedRuleSystem(bvolume.Objects); return(rules); }