You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

185 lines
4.9 KiB

#include <test_common.h>
#include <igl/isolines.h>
#include <igl/matlab_format.h>
#include <iostream>
TEST_CASE("isolines: broken-sphere", "[igl]" )
{
// Test a case with edge-edge, edge-vertex, vertex-vertex, boundary edge, and
// degenerate boundaries
Eigen::MatrixXd V(42,3);
V<<
0,0.52573111211913359,0.85065080835203999,
0,-0.52573111211913359,0.85065080835203999,
0,0.52573111211913359,-0.85065080835203999,
0,-0.52573111211913359,-0.85065080835203999,
0.52573111211913359,0.85065080835203999,0,
-0.52573111211913359,0.85065080835203999,0,
0.52573111211913359,-0.85065080835203999,0,
-0.52573111211913359,-0.85065080835203999,0,
0.85065080835203999,0,0.52573111211913359,
-0.85065080835203999,0,0.52573111211913359,
0.85065080835203999,0,-0.52573111211913359,
-0.85065080835203999,0,-0.52573111211913359,
0,0,1,
0.3090169943749474,0.80901699437494734,0.5,
-0.3090169943749474,0.80901699437494734,0.5,
0.5,0.3090169943749474,0.80901699437494734,
-0.5,0.3090169943749474,0.80901699437494734,
0.3090169943749474,-0.80901699437494734,0.5,
-0.3090169943749474,-0.80901699437494734,0.5,
0.5,-0.3090169943749474,0.80901699437494734,
-0.5,-0.3090169943749474,0.80901699437494734,
0,0,-1,
0.3090169943749474,0.80901699437494734,-0.5,
-0.3090169943749474,0.80901699437494734,-0.5,
0.5,0.3090169943749474,-0.80901699437494734,
-0.5,0.3090169943749474,-0.80901699437494734,
0.3090169943749474,-0.80901699437494734,-0.5,
-0.3090169943749474,-0.80901699437494734,-0.5,
0.5,-0.3090169943749474,-0.80901699437494734,
-0.5,-0.3090169943749474,-0.80901699437494734,
0,1,0,
0.80901699437494734,0.5,0.3090169943749474,
0.80901699437494734,0.5,-0.3090169943749474,
-0.80901699437494734,0.5,0.3090169943749474,
-0.80901699437494734,0.5,-0.3090169943749474,
0,-1,0,
0.80901699437494734,-0.5,0.3090169943749474,
0.80901699437494734,-0.5,-0.3090169943749474,
-0.80901699437494734,-0.5,0.3090169943749474,
-0.80901699437494734,-0.5,-0.3090169943749474,
1,0,0,
-1,0,0;
Eigen::MatrixXi F(58,3);
F <<
0,12,15,
0,15,13,
0,13,14,
0,14,16,
0,16,12,
8,40,31,
4,32,22,
4,22,30,
5,23,34,
5,34,33,
1,18,17,
3,26,27,
8,31,15,
4,30,13,
5,33,14,
9,20,16,
6,36,17,
6,37,36,
10,32,40,
10,24,32,
2,23,22,
2,25,23,
11,41,34,
7,18,38,
7,35,18,
6,35,26,
7,39,27,
11,25,29,
2,24,21,
8,15,19,
4,13,31,
5,14,30,
9,16,33,
4,31,32,
2,22,24,
5,30,23,
11,34,25,
9,33,41,
7,38,39,
6,17,35,
7,27,35,
2,21,25,
10,28,24,
6,26,37,
19,15,12,
31,13,15,
30,14,13,
33,16,14,
20,12,16,
32,31,40,
24,22,32,
23,30,22,
25,34,23,
41,33,34,
35,17,18,
35,27,26,
25,21,29,
24,28,21;
Eigen::MatrixXd iV;
Eigen::MatrixXi iE;
Eigen::VectorXi I;
Eigen::VectorXd vals(3);
vals<<-0.5,0,0.5;
igl::isolines(V,F,V.col(1).eval(),vals,iV,iE,I);
Eigen::MatrixXd iV_gt(30,3);
iV_gt<<
0.809016994374947,-0.5, 0.309016994374947,
0.809016994374947,-0.5,-0.309016994374947,
-0.809016994374947,-0.5, 0.309016994374947,
-0.809016994374947,-0.5,-0.309016994374947,
0.5, 0, 0.809016994374947,
-0.5, 0, 0.809016994374947,
0.5, 0,-0.809016994374947,
-0.5, 0,-0.809016994374947,
0, 0, 1,
0.85065080835204, 0, 0.525731112119134,
1, 0, 0,
-0.85065080835204, 0, 0.525731112119134,
0.85065080835204, 0,-0.525731112119134,
-0.85065080835204, 0,-0.525731112119134,
-1, 0, 0,
0, 0, -1,
0, 0.5, 0.857960478079794,
0.0593664879495925, 0.5, 0.845707501720507,
-0.0593664879495925, 0.5, 0.845707501720507,
0, 0.5,-0.857960478079794,
0.0593664879495925, 0.5,-0.845707501720507,
-0.0593664879495925, 0.5,-0.845707501720507,
0.427050983124842, 0.5, 0.690983005625053,
-0.427050983124842, 0.5, 0.690983005625052,
0.427050983124842, 0.5,-0.690983005625053,
-0.427050983124842, 0.5,-0.690983005625053,
0.809016994374947, 0.5, 0.309016994374947,
0.809016994374947, 0.5,-0.309016994374947,
-0.809016994374947, 0.5,-0.309016994374947,
-0.809016994374947, 0.5, 0.309016994374947;
Eigen::MatrixXi iE_gt(28,2);
iE_gt<<
0, 1,
3, 2,
9,10,
11, 5,
10,12,
13,14,
7,13,
4, 9,
14,11,
12, 6,
8, 4,
5, 8,
15, 7,
6,15,
16,17,
17,22,
23,18,
18,16,
28,29,
21,25,
20,19,
26,27,
24,20,
19,21,
22,26,
29,23,
27,24,
25,28;
test_common::assert_near(iV,iV_gt,1e-15);
test_common::assert_eq(iE,iE_gt);
}