Example #1
0
        /**
         * Main program (used for testing).
         */
        public static void main(String[] args)
        {
            Pnt p = new Pnt(1, 2, 3);

            Console.WriteLine("Pnt created: " + p);
            Pnt[] matrix1 = { new Pnt(1, 2), new Pnt(3, 4) };
            Pnt[] matrix2 = { new Pnt(7, 0, 5), new Pnt(2, 4, 6), new Pnt(3, 8, 1) };
            Console.WriteLine("Results should be -2 and -288: ");
            Console.WriteLine(determinant(matrix1) + " " + determinant(matrix2));
            Pnt p1 = new Pnt(1, 1); Pnt p2 = new Pnt(-1, 1);

            Console.WriteLine("Angle between " + p1 + " and " + p2 + ": " + p1.angle(p2));
            Console.WriteLine(p1 + " subtract " + p2 + ": " + p1.subtract(p2));
            Pnt v0 = new Pnt(0, 0), v1 = new Pnt(1, 1), v2 = new Pnt(2, 2);

            Pnt[] vs = { v0, new Pnt(0, 1), new Pnt(1, 0) };
            Pnt   vp = new Pnt(.1, .1);

            Console.WriteLine(vp + " isInside " + toString(vs) + ": " + vp.isInside(vs));
            Console.WriteLine(v1 + " isInside " + toString(vs) + ": " + v1.isInside(vs));
            Console.WriteLine(vp + " vsCircumcircle " + toString(vs) + ": " +
                              vp.vsCircumcircle(vs));
            Console.WriteLine(v1 + " vsCircumcircle " + toString(vs) + ": " +
                              v1.vsCircumcircle(vs));
            Console.WriteLine(v2 + " vsCircumcircle " + toString(vs) + ": " +
                              v2.vsCircumcircle(vs));
            Console.WriteLine("Circumcenter of " + toString(vs) + " is " + circumcenter(vs));
        }
		/**
		 * Place a new point site into the DT.
		 * @param site the new Pnt
		 * @return set of all new triangles created
		 */
		public Set delaunayPlace(Pnt site) {
        Set newTriangles = new HashSet();
        Set oldTriangles = new HashSet();
        Set doneSet = new HashSet();
        LinkedList waitingQ = new LinkedList();
        
        // Locate containing triangle
        if (debug) Console.WriteLine("Locate");
        Simplex triangle = locate(site);
        
        // Give up if no containing triangle or if site is already in DT
		var triangle_null = triangle == null;
        if (triangle_null || triangle.contains(site)) return newTriangles;
        
        // Find Delaunay cavity (those triangles with site in their circumcircles)
        if (debug) Console.WriteLine("Cavity");
        waitingQ.add(triangle);
        while (!waitingQ.isEmpty()) {
            triangle = (Simplex) waitingQ.removeFirst();      
            if (site.vsCircumcircle((Pnt[]) triangle.toArray(new Pnt[0])) == 1) continue;
            oldTriangles.add(triangle);
            Iterator it = this.neighbors(triangle).iterator();
            for (; it.hasNext();) {
                Simplex tri = (Simplex) it.next();
                if (doneSet.contains(tri)) continue;
                doneSet.add(tri);
                waitingQ.add(tri);
            }
        }
        // Create the new triangles
        if (debug) Console.WriteLine("Create");
        for (Iterator it = Simplex.boundary(oldTriangles).iterator(); it.hasNext();) {
            Set facet = (Set) it.next();
            facet.add(site);
            newTriangles.add(new Simplex(facet));
        }
        // Replace old triangles with new triangles
		if (debug) Console.WriteLine("Update");
        this.update(oldTriangles, newTriangles);
        
        // Update mostRecent triangle
        if (!newTriangles.isEmpty()) mostRecent = (Simplex) newTriangles.iterator().next();
        return newTriangles;
    }
Example #3
0
		/**
		 * Main program (used for testing).
		 */
		public static void main(String[] args)
		{
			Pnt p = new Pnt(1, 2, 3);
			Console.WriteLine("Pnt created: " + p);
			Pnt[] matrix1 = { new Pnt(1, 2), new Pnt(3, 4) };
			Pnt[] matrix2 = { new Pnt(7, 0, 5), new Pnt(2, 4, 6), new Pnt(3, 8, 1) };
			Console.WriteLine("Results should be -2 and -288: ");
			Console.WriteLine(determinant(matrix1) + " " + determinant(matrix2));
			Pnt p1 = new Pnt(1, 1); Pnt p2 = new Pnt(-1, 1);
			Console.WriteLine("Angle between " + p1 + " and " + p2 + ": " + p1.angle(p2));
			Console.WriteLine(p1 + " subtract " + p2 + ": " + p1.subtract(p2));
			Pnt v0 = new Pnt(0, 0), v1 = new Pnt(1, 1), v2 = new Pnt(2, 2);
			Pnt[] vs = { v0, new Pnt(0, 1), new Pnt(1, 0) };
			Pnt vp = new Pnt(.1, .1);
			Console.WriteLine(vp + " isInside " + toString(vs) + ": " + vp.isInside(vs));
			Console.WriteLine(v1 + " isInside " + toString(vs) + ": " + v1.isInside(vs));
			Console.WriteLine(vp + " vsCircumcircle " + toString(vs) + ": " +
							   vp.vsCircumcircle(vs));
			Console.WriteLine(v1 + " vsCircumcircle " + toString(vs) + ": " +
							   v1.vsCircumcircle(vs));
			Console.WriteLine(v2 + " vsCircumcircle " + toString(vs) + ": " +
							   v2.vsCircumcircle(vs));
			Console.WriteLine("Circumcenter of " + toString(vs) + " is " + circumcenter(vs));
		}
Example #4
0
        /**
         * Place a new point site into the DT.
         * @param site the new Pnt
         * @return set of all new triangles created
         */
        public Set delaunayPlace(Pnt site)
        {
            Set        newTriangles = new HashSet();
            Set        oldTriangles = new HashSet();
            Set        doneSet      = new HashSet();
            LinkedList waitingQ     = new LinkedList();

            // Locate containing triangle
            if (debug)
            {
                Console.WriteLine("Locate");
            }
            Simplex triangle = locate(site);

            // Give up if no containing triangle or if site is already in DT
            var triangle_null = triangle == null;

            if (triangle_null || triangle.contains(site))
            {
                return(newTriangles);
            }

            // Find Delaunay cavity (those triangles with site in their circumcircles)
            if (debug)
            {
                Console.WriteLine("Cavity");
            }
            waitingQ.add(triangle);
            while (!waitingQ.isEmpty())
            {
                triangle = (Simplex)waitingQ.removeFirst();
                if (site.vsCircumcircle((Pnt[])triangle.toArray(new Pnt[0])) == 1)
                {
                    continue;
                }
                oldTriangles.add(triangle);
                Iterator it = this.neighbors(triangle).iterator();
                for (; it.hasNext();)
                {
                    Simplex tri = (Simplex)it.next();
                    if (doneSet.contains(tri))
                    {
                        continue;
                    }
                    doneSet.add(tri);
                    waitingQ.add(tri);
                }
            }
            // Create the new triangles
            if (debug)
            {
                Console.WriteLine("Create");
            }
            for (Iterator it = Simplex.boundary(oldTriangles).iterator(); it.hasNext();)
            {
                Set facet = (Set)it.next();
                facet.add(site);
                newTriangles.add(new Simplex(facet));
            }
            // Replace old triangles with new triangles
            if (debug)
            {
                Console.WriteLine("Update");
            }
            this.update(oldTriangles, newTriangles);

            // Update mostRecent triangle
            if (!newTriangles.isEmpty())
            {
                mostRecent = (Simplex)newTriangles.iterator().next();
            }
            return(newTriangles);
        }