private void ChaoticPointGeneration(MyArea area, List <MyNode> result, int count, double h = -1) { MyRectangle rect = MyRectangle.GetAreaRectangle(area); int maxNodes = count; Random generator = new Random((int)DateTime.Now.Ticks); for (int i = 0; result.Count < maxNodes; i++) { int triesCount = (int)nudTriesCount.Value; do { double x = rect.minX + generator.NextDouble() * rect.Width; double y = rect.minY + generator.NextDouble() * rect.Height; MyNode p = new MyNode(x, y); if (PointFits(area, result, p, h)) { p.Id = ++nodesCount; result.Add(p); break; } } while (--triesCount > 0); if (triesCount == 0) { break; } } }
private void RegularPointGeneration(MyArea area, List <MyNode> result) { MyRectangle rect = MyRectangle.GetAreaRectangle(area); double h = (double)nudMinDistance.Value; for (double x = rect.minX; x.LessOrEqual(rect.maxX); x += h) { for (double y = rect.minY; y.LessOrEqual(rect.maxY); y += h) { MyNode p = new MyNode(x, y); if (PointFits(area, result, p)) { p.Id = ++nodesCount; result.Add(p); } } } }
private void EqualAngleGeneration(MyArea area, List <MyNode> result) { MyRectangle rect = MyRectangle.GetAreaRectangle(area); double h = (double)nudMinDistance.Value; bool odd = false; double hy = h * Math.Pow(3.0, 0.5) / 2.0; for (double y = rect.minY; y.LessOrEqual(rect.maxY); y += hy) { for (double x = rect.minX; x.LessOrEqual(rect.maxX); x += h) { MyNode p = new MyNode(odd ? x + h / 2 : x, y); if (PointFits(area, result, p)) { p.Id = ++nodesCount; result.Add(p); } } odd = !odd; } }