Examlpes

Problem: Rasterize scattered point data

Consider the Delaunay triangulation of the previous example. Due to the random point generation on the surface of the starfish, the triangles also have a random shape.

You can easily re-triangulate the existing triangulation over an arbitrary rectangular raster by interpolating the existing triangulation. Use this feature to rasterize scattered point data or to reduce the number of triangulation points.

Solution using G#

  1.        public static void DelaunayRasteredExample()
  2.         {
  3.             // Create a sample point set
  4.             PointSet ps = SamplePoints.SupershapeStarfish(10000);
  5.  
  6.             // Instantiate a delaunay triangulation
  7.             DelaunayTriangulation2d dt = new DelaunayTriangulation2d();
  8.  
  9.             // Assign the point set to triangulate
  10.             dt.TriangulationPoints = ps;
  11.  
  12.             // Triangulate the point set
  13.             dt.Triangulate();
  14.  
  15.             // You may add points to the existing triangulation
  16.             dt.AddPointToCurrentTriangulation(new Point(0.5, 0.5, 0));
  17.  
  18.             // Rasterize the current triangulation in over 0.02x0.02-raster
  19.             dt.RasterizeCurrentTriangulation(0.02, 0.02);
  20.  
  21.             // Get the triangulation
  22.             List<Triangle> triangles = dt.GetTriangles();
  23.  
  24.             // visualize: ---------------------------------------------------
  25.             // Make a scene
  26.             Scene sc = new Scene();
  27.  
  28.             // Set the point style
  29.             sc.PointDisplayMode = 0;
  30.             sc.PointSize = 0;
  31.  
  32.             // Make a layer for the triangles
  33.             Scene.Layer tLayer = new Scene.Layer("Delaunay_Triangles", 90);
  34.  
  35.             // Make a layer for the triangulation points
  36.             Scene.Layer pLayer = new Scene.Layer("Triangulation_Points", 1);
  37.  
  38.             // Add the triangles and the triangulation points to the scene
  39.             sc.Add(triangles, tLayer);
  40.             sc.Add(dt.TriangulationPoints, pLayer);
  41.  
  42.             // Output the scene as dxf
  43.             sc.WriteDxf(@"c:\delaunay_rastered.dxf");
  44.         }

Output

Rastered Delaunay triangulation of 10001 random points on a starfish supershape. The rastered triangulation only comprises 11882 triangles compared to 19986 triangles in the initial triangulation.
Partial top view on the rastered mesh.

<< back