private static double[] InterpolateData(Mesh mesh, double[] data, IEnumerable <Point> xy) { // The interpolated values. var values = new double[xy.Count()]; var qtree = new TriangleQuadTree(mesh); int i = 0; foreach (var p in xy) { var tri = qtree.Query(p.X, p.Y); // For easy access of the interpolated values. p.ID = i; if (tri == null) { values[i] = float.NaN; } else { values[i] = Interpolation.InterpolatePoint(tri, p, data); } i++; } return(values); }
internal void CalcDL(Structure str) { if (str == null || str.RedPlanning == null || str.RedPlanning.Count == 0) { return; } List <Vertex> vrtxs = new List <Vertex>(); Vertex vrtx; int i = 1; foreach (PlanningVertex item in str.RedPlanning) { vrtx = new Vertex(item.X, item.Y, item.Number, 2); vrtx.Attributes[0] = item.Red; vrtx.Attributes[1] = item.Black; vrtxs.Add(vrtx); i++; } Contour cnt = new Contour(vrtxs); TriangleNet.Geometry.Polygon polygon = new TriangleNet.Geometry.Polygon(); polygon.Add(cnt); GenericMesher mesher = new GenericMesher(); ConstraintOptions constraint = new ConstraintOptions(); constraint.Convex = true; Mesh meshPlanning = (Mesh)mesher.Triangulate(polygon, constraint); TriangleQuadTree meshTree = new TriangleQuadTree(meshPlanning); TriangleNet.Topology.Triangle trgl = (TriangleNet.Topology.Triangle)meshTree.Query(X, Y); if (trgl == null) { Dictionary <Vertex, double> valuePairs = new Dictionary <Vertex, double>(); Line2d ln; foreach (Vertex item in meshPlanning.Vertices) { ln = new Line2d(new Point2d(X, Y), new Point2d(item.X, item.Y)); valuePairs.Add(item, ln.Length); } IOrderedEnumerable <KeyValuePair <Vertex, double> > selected = from v in valuePairs // определяем каждый объект как orderby v.Value // упорядочиваем по возрастанию select v; // выбираем объект List <KeyValuePair <Vertex, double> > lst = selected.ToList(); foreach (TriangleNet.Topology.Triangle item in meshPlanning.Triangles) { if (item.Contains(lst[0].Key) && item.Contains(lst[1].Key)) { trgl = item; break; } } } vrtx = new Vertex(X, Y, Number, 2); Interpolation.InterpolateAttributes(vrtx, trgl, 1); DL = Math.Round(vrtx.Attributes[0], 3); }
private ITriangle FindTriangleAt(float x, float y) { // Get mesh coordinates var p = new System.Drawing.PointF(x, y); renderControl.Zoom.ScreenToWorld(ref p); topoControlView.SetPosition(p); if (tree == null) { tree = new TriangleQuadTree(mesh, 5, 2); } return(tree.Query(p.X, p.Y)); }
private ITriangle FindTriangleAt(float xr, float yr) { // Get mesh coordinates var p = new System.Drawing.PointF(xr, yr); renderControl.Zoom.ScreenToWorld(p, out double x, out double y); topoControlView.SetPosition(x, y); if (tree == null) { tree = new TriangleQuadTree(mesh, 5, 2); } return(tree.Query(x, y)); }
public void TestProcessRegionProtected() { var poly = new Polygon(); // Outer region. poly.Add(Helper.Rectangle(-2d, 2d, 2d, -2d, 2)); // Inner region. poly.Add(Helper.Rectangle(-1d, 1d, 1d, -1d, 1)); poly.Regions.Add(new RegionPointer(0d, 0d, 1)); var mesh = (Mesh)poly.Triangulate(); var iterator = new RegionIterator(mesh); var qtree = new TriangleQuadTree(mesh); // Find a seeding triangle in region 1. var seed = (Triangle)qtree.Query(0.0, 0.0); iterator.Process(seed, t => Assert.AreEqual(1, t.Label)); }
internal void CalcNL(Mesh blackMesh) { if (blackMesh == null) { return; } Vertex vrtx; TriangleQuadTree meshTree = new TriangleQuadTree(blackMesh); TriangleNet.Topology.Triangle trgl = (TriangleNet.Topology.Triangle)meshTree.Query(X, Y); if (trgl == null) { Dictionary <Vertex, double> valuePairs = new Dictionary <Vertex, double>(); Line2d ln; foreach (Vertex item in blackMesh.Vertices) { ln = new Line2d(new Point2d(X, Y), new Point2d(item.X, item.Y)); valuePairs.Add(item, ln.Length); } IOrderedEnumerable <KeyValuePair <Vertex, double> > selected = from v in valuePairs // определяем каждый объект как orderby v.Value // упорядочиваем по возрастанию select v; // выбираем объект List <KeyValuePair <Vertex, double> > lst = selected.ToList(); foreach (TriangleNet.Topology.Triangle item in blackMesh.Triangles) { if (item.Contains(lst[0].Key) && item.Contains(lst[1].Key)) { trgl = item; break; } } } vrtx = new Vertex(X, Y, Number, 2); Interpolation.InterpolateAttributes(vrtx, trgl, 1); NL = Math.Round(vrtx.Attributes[0], 3); }