private static void test006() //****************************************************************************80 // // Purpose: // // TEST006 tests TET_MESH_TET_NEIGHBORS. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 18 August 2009 // // Author: // // John Burkardt // { int node_num = 0; int tet_num = 0; const int tet_order = 4; Console.WriteLine(""); Console.WriteLine("TEST006"); Console.WriteLine(" TET_MESH_TET_NEIGHBORS computes the 4 neighboring"); Console.WriteLine(" tetrahedrons of each tetrahedron in a tet mesh."); Console.WriteLine(" containing a point."); // // Set up the example tetrahedron mesh. // TetMesh.tet_mesh_order4_example_size(ref node_num, ref tet_num); Console.WriteLine(""); Console.WriteLine(" This mesh has tetrahedron order " + tet_order + ""); Console.WriteLine(" The number of tetrahedrons is " + tet_num + ""); double[] node_xyz = new double[3 * node_num]; int[] tet_node = new int[tet_order * tet_num]; TetMesh.tet_mesh_order4_example_set(node_num, tet_num, ref node_xyz, ref tet_node); // // Print the tets. // typeMethods.i4mat_transpose_print_some(tet_order, tet_num, tet_node, 1, 1, tet_order, 10, " First 10 Tets:"); // // The TET_NEIGHBOR array is needed by TET_MESH_DELAUNAY_SEARCH. // int[] tet_neighbor = TetMesh.tet_mesh_neighbor_tets(tet_order, tet_num, tet_node); typeMethods.i4mat_transpose_print_some(4, tet_num, tet_neighbor, 1, 1, 4, 10, " First 10 Tet Neighbors:"); }
private static void test007() //****************************************************************************80 // // Purpose: // // TEST007 tests TET_MESH_SEARCH_NAIVE. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 19 August 2009 // // Author: // // John Burkardt // { int face = 0; int node_num = 0; double[] p = new double[3]; int step_num = 0; int test; const int test_num = 5; int tet_num = 0; const int tet_order = 4; double[] tet_xyz = new double[3 * 4]; int seed = 123456789; Console.WriteLine(""); Console.WriteLine("TEST007"); Console.WriteLine(" TET_MESH_SEARCH_NAIVE uses a naive algorithm"); Console.WriteLine(" to search a tetrahedral mesh for the tetrahedron"); Console.WriteLine(" containing a point."); // // Set up the example tetrahedron mesh. // TetMesh.tet_mesh_order4_example_size(ref node_num, ref tet_num); Console.WriteLine(""); Console.WriteLine(" This mesh has tetrahedron order " + tet_order + ""); Console.WriteLine(" The number of tetrahedrons is " + tet_num + ""); double[] node_xyz = new double[3 * node_num]; int[] tet_node = new int[tet_order * tet_num]; TetMesh.tet_mesh_order4_example_set(node_num, tet_num, ref node_xyz, ref tet_node); // // The TET_NEIGHBOR array is needed for the Delaunay search. // int[] tet_neighbor = TetMesh.tet_mesh_neighbor_tets(tet_order, tet_num, tet_node); for (test = 1; test <= test_num; test++) { // // Choose a tetrahedron at random. // int tet1 = UniformRNG.i4_uniform_ab(0, tet_num - 1, ref seed); Console.WriteLine(""); Console.WriteLine(" Point was chosen from tetrahedron " + tet1.ToString(CultureInfo.InvariantCulture).PadLeft(8) + ""); int j; for (j = 0; j < 4; j++) { int k = tet_node[j + tet1 * 4]; int i; for (i = 0; i < 3; i++) { tet_xyz[i + j * 3] = node_xyz[i + k * 3]; } } // // Choose a point in the tetrahedron at random. // Tetrahedron.tetrahedron_sample(tet_xyz, 1, ref seed, ref p); // // Naive search. // int tet2 = TetMesh.tet_mesh_search_naive(node_num, node_xyz, tet_order, tet_num, tet_node, p, ref step_num); Console.WriteLine(" Naive search ended in tetrahedron " + tet2.ToString(CultureInfo.InvariantCulture).PadLeft(8) + ", number of steps = " + step_num + ""); // // Delaunay search. // int tet3 = TetMesh.tet_mesh_search_delaunay(node_num, node_xyz, tet_order, tet_num, tet_node, tet_neighbor, p, ref face, ref step_num); Console.WriteLine(" Delaunay search ended in tetrahedron " + tet3.ToString(CultureInfo.InvariantCulture).PadLeft(8) + ", number of steps = " + step_num + ""); } }