private static IHardenedPolymer MakeHull(IHardenedPolymer polymer) { var huller = new ConvexHuller(); var hull = huller.ComputeConvexHull(polymer); return(hull); }
private void FillOuterHull(IHardenedPolymer hull) { var origin = hull.First(); var triangles = new List <Triangle>(); for (int i = 1; i < hull.Count - 1; i++) { triangles.Add(new Triangle(origin, hull[i], hull[i + 1])); } for (int i = 0; i < triangles.Count; i++) { var current = triangles[i]; if (i - 1 >= 0) { current.Neighbours.Add(triangles[i - 1]); } if (i + 1 < triangles.Count) { current.Neighbours.Add(triangles[i + 1]); } } // До этого момента все ОК. #warning Try Flip foreach here. this.triangles.AddRange(triangles); // Запускаем Делоне foreach (var triangle in this.triangles.ToList()) // тут меняем лист по которому идем. { if (this.triangles.Contains(triangle)) // Contains работает неправильно { DelaunayFrom(triangle); } } }
public Segment(IHardenedPolymer polymer) { if (polymer.Count != 2) { throw new InvalidNumberOfNodesException("Чето тут не так."); } Polymer = polymer; }
public IHardenedPolymer ComputeConvexHull(IHardenedPolymer polymer) { if (polymer.Count < 3) { throw new InvalidNumberOfNodesException("Ну вы и децыбел."); } return(GrahamScan(polymer)); }
private Triangle(IHardenedPolymer polymer, List <Triangle> neighbours) { if (polymer.Count != 3 || neighbours.Count > 3) { throw new InvalidNumberOfNodesException("Чето тут не так."); } Polymer = polymer; Neighbours = neighbours; }
public Triangulation(IHardenedPolymer polymer) : this() { IHardenedPolymer hull = MakeHull(polymer); FillOuterHull(hull); IHardenedPolymer innerPoints = new Polymer(polymer.Except(hull)); #warning Add inner points here. FillInnerPoints(innerPoints); throw new NotImplementedException(); }
public Polymer Sort(IHardenedPolymer polymer, Vector origin) { Polymer localPolymer = new Polymer(polymer); localPolymer.Remove(origin); Polymer top = new Polymer(); Polymer bot = new Polymer(); foreach (var node in localPolymer) { var op = node - origin; if (op.Y >= 0) { top.Add(op); } else { bot.Add(op); } } float cos(Vector point) => Math.Sign(point.X) * point.X * point.X / point.LengthSquared; top = new Polymer(top.OrderByDescending(cos)); bot = new Polymer(bot.OrderBy(cos)); Polymer sorted = new Polymer(); sorted.Add(origin); foreach (var p in top) { sorted.Add(p + origin); } foreach (var p in bot) { sorted.Add(p + origin); } return(sorted); }
public Triangulation(IHardenedPolymer polymer, IDynamicRenderer renderer) : this() { // do same as Triangulation(IHardenedPolymer polymer) // but render steps staticRenderer = new StaticRenderer(renderer); staticRenderer.RenderText("Hello from hell.", new Vector(400)); IHardenedPolymer hull = MakeHull(polymer); #warning hull.ToSegments() staticRenderer.RenderSegments(hull.ToSegments(), "#ffff6b81"); var hullString = hull.ToPythonList(); var polymerString = polymer.ToPythonList(); FillOuterHull(hull); // hull.Count = 30; polymer.Count = 32. Вопрос? DrawCurrentTriangulationState(); //staticRenderer. //staticRenderer.render }
private IHardenedPolymer GrahamScan(IHardenedPolymer polymer) { var angleSorter = new PolymerSorter(); var origin = polymer.OrderBy(p => p.Y).ThenBy(p => p.X).First(); var ordered = angleSorter.Sort(polymer, origin); var stack = new Stack <Vector>(); stack.Push(ordered[0]); stack.Push(ordered[1]); for (int i = 2; i < ordered.Count; i++) { while (stack.Count >= 2 && !CCW(stack.Skip(1).First(), stack.Peek(), ordered[i])) { stack.Pop(); } stack.Push(ordered[i]); } Polymer hull = new Polymer(stack.Reverse()); return(hull); }
public ToVector2ListAdapter(IHardenedPolymer polymer) : this((List <RadianceStandard.Primitives.Vector>)polymer) { }
public Rectangle(IHardenedPolymer polymer) { Polymer = polymer; }
private void FillInnerPoints(IHardenedPolymer points) { }
public Triangle(IHardenedPolymer polymer, IEnumerable <Triangle> neighbours) : this(polymer, neighbours.ToList()) { }
public Triangle(IHardenedPolymer polymer) : this(polymer, new List <Triangle>()) { }
public Polymer(IHardenedPolymer polymer) : this((IEnumerable <Vector>)polymer) { }