bool test_cube() { LEVELSET<GRID<TV> >* implicit_object = createTriMeshAndLevelSet("/Users/jingweihuang/Desktop/projects/levelset/Resources/models/cube.obj"); for (int i = 1; i <= implicit_object->phi.dim(1); ++i) { for (int j = 1; j <= implicit_object->phi.dim(2); ++j) { for (int k = 1; k <= implicit_object->phi.dim(3); ++k) { double min_dis = 2; TV x = implicit_object->grid.X(TV_INT(i,j,k)); if (x(1) < -0.95 || x(1) > 0.95 || x(2) < -0.95 || x(2) > 0.95 || x(3) < -0.95 || x(3) > 0.95) continue; TV normal = TV(0,0,0); if (min_dis > x(1) + 1) { min_dis = x(1) + 1; normal = TV(-1,0,0); } if (min_dis > 1 - x(1)) { min_dis = 1 - x(1); normal = TV(1, 0, 0); } if (min_dis > x(2) + 1) { min_dis = x(2) + 1; normal = TV(0, -1, 0); } if (min_dis > 1 - x(2)) { min_dis = 1 - x(2); normal = TV(0, 1, 0); } if (min_dis > x(3) + 1) { min_dis = x(3) + 1; normal = TV(0, 0, -1); } if (min_dis > 1 - x(3)) { min_dis = 1 - x(3); normal = TV(0, 0, 1); } pair<float, TV> intersection = implicit_object->Intersect(x); double angle = acos(normal.Dot_Product(intersection.second)) / 3.141502654 * 180.0; if (angle > 5 && fabs(fabs(x(1)) - fabs(x(2))) > 1e-4 && fabs(fabs(x(1)) - fabs(x(3))) > 1e-4 && fabs(fabs(x(2)) - fabs(x(3))) > 1e-4) { return false; } } } } return true; }