private static void test005() //****************************************************************************80 // // Purpose: // // TEST005 tests TETRAHEDRON_BARYCENTRIC. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 01 August 2009 // // Author: // // John Burkardt // { int test1; const int test1_num = 3; const int test2_num = 5; int seed = 123456789; Console.WriteLine(""); Console.WriteLine("TEST005"); Console.WriteLine(" TETRAHEDRON_BARYCENTRIC computes the barycentric"); Console.WriteLine(" coordinates of a point."); // // Choose a random tetrahedron. // for (test1 = 1; test1 <= test1_num; test1++) { double[] tet_xyz = UniformRNG.r8mat_uniform_01_new(3, 4, ref seed); typeMethods.r8mat_transpose_print(3, 4, tet_xyz, " Random tetrahedron:"); // // Choose barycentric coordinates C1 at random. // // Define a point P. // // Have TETRAHEDRON_BARYCENTRIC compute C2, the barycentric coordinates of P. // int test2; for (test2 = 1; test2 <= test2_num; test2++) { double[] c1 = UniformRNG.r8vec_uniform_01_new(4, ref seed); double c1_sum = typeMethods.r8vec_sum(4, c1); int i; for (i = 0; i < 4; i++) { c1[i] /= c1_sum; } double[] p = typeMethods.r8mat_mv_new(3, 4, tet_xyz, c1); double[] c2 = Tetrahedron.tetrahedron_barycentric(tet_xyz, p); Console.WriteLine(""); string cout = " C1 = "; for (i = 0; i < 4; i++) { cout += " " + c1[i].ToString("0.######").PadLeft(14); } Console.WriteLine(cout); cout = " C2 = "; for (i = 0; i < 4; i++) { cout += " " + c2[i].ToString("0.######").PadLeft(14); } Console.WriteLine(cout); } } }
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 + ""); } }
private static void test002() //****************************************************************************80 // // Purpose: // // TEST002 tests TETRAHEDRON_ORDER4_PHYSICAL_TO_REFERENCE, // TETRAHEDRON_ORDER4_REFERENCE_TO_PHYSICAL. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 08 December 2006 // // Author: // // John Burkardt // { const int N = 10; int j; double[] phy = new double[3 * N]; double[] ref_ = new double[3 * N]; double[] ref2 = new double[3 * N]; double[] t = { 5.0, 0.0, 0.0, 8.0, 0.0, 0.0, 5.0, 2.0, 0.0, 6.0, 1.0, 2.0 }; int seed = 123456789; Console.WriteLine(""); Console.WriteLine("TEST002"); Console.WriteLine(" For an order 4 tetrahedron,"); Console.WriteLine(" TETRAHEDRON_ORDER4_PHYSICAL_TO_REFERENCE"); Console.WriteLine(" maps a physical point to a reference point."); Console.WriteLine(" TETRAHEDRON_ORDER4_REFERENCE_TO_PHYSICAL "); Console.WriteLine(" maps a reference point to a physical point."); Console.WriteLine(""); Console.WriteLine(" ( R, S, T ) ==> ( X, Y, Z ) ==> ( R2, S2, T2 )"); Console.WriteLine(""); Tetrahedron.tetrahedron_reference_sample(N, ref seed, ref ref_); Tetrahedron.tetrahedron_order4_reference_to_physical(t, N, ref_, ref phy); Tetrahedron.tetrahedron_order4_physical_to_reference(t, N, phy, ref ref2); for (j = 0; j < N; j++) { Console.WriteLine(" " + ref_[0 + j * 3].ToString("0.####").PadLeft(8) + " " + ref_[1 + j * 3].ToString("0.####").PadLeft(8) + " " + ref_[2 + j * 3].ToString("0.####").PadLeft(8) + " " + " " + phy[0 + j * 3].ToString("0.####").PadLeft(8) + " " + phy[1 + j * 3].ToString("0.####").PadLeft(8) + " " + phy[2 + j * 3].ToString("0.####").PadLeft(8) + " " + " " + ref2[0 + j * 3].ToString("0.####").PadLeft(8) + " " + ref2[1 + j * 3].ToString("0.####").PadLeft(8) + " " + ref2[2 + j * 3].ToString("0.####").PadLeft(8) + ""); } }