52 auto params = SH3::defaultParameters()
53 | SHG3::defaultParameters();
55 params(
"polynomial",
"goursat" )(
"gridstep", 1.0)(
"verbose", 0);
56 auto implicit_shape = SH3::makeImplicitShape3D ( params );
57 auto digitized_shape = SH3::makeDigitizedImplicitShape3D( implicit_shape, params );
58 auto K = SH3::getKSpace( params );
61 SECTION(
"Basic Construction using Trivial Normals and regular/clamped advection")
64 auto surface = SH3::makeDigitalSurface( digitized_shape,
K, params );
65 auto surfels = SH3::getSurfelRange(
surface, params );
72 REQUIRE( energy == Approx(1684.340));
76 REQUIRE( finalenergy == Approx( 4.7763 ) );
86 SH3::saveOBJ(
surface, [&] (
const SH3::Cell &c){
return original[ cellIndex[c]];},
87 normals, SH3::Colors(),
"originalSurf.obj");
88 SH3::saveOBJ(
surface, [&] (
const SH3::Cell &c){
return regularizedPosition[ cellIndex[c]];},
89 normals, SH3::Colors(),
"regularizedSurf.obj");
94 REQUIRE( original[0] == regularizedPosition[0] );
95 REQUIRE( original[123] == regularizedPosition[123] );
100 SH3::saveOBJ(
surface, [&] (
const SH3::Cell &c){
return regularizedPosition[ cellIndex[c]];},
101 normals, SH3::Colors(),
"regularizedSurfClamped.obj");
102 REQUIRE( finalenergyClamped == Approx(12.1914) );
103 REQUIRE( finalenergy < finalenergyClamped );
106 auto aPointelIndex = cellIndex.begin();
110 SECTION(
"Basic Construction with II Normal Vectors")
112 auto surface = SH3::makeDigitalSurface( digitized_shape,
K, params );
113 auto surfels = SH3::getSurfelRange(
surface, params );
115 auto ii_normals = SHG3::getIINormalVectors(digitized_shape, surfels, params);
124 REQUIRE( energy == Approx(1588.649));
131 SH3::saveOBJ(
surface, [&] (
const SH3::Cell &c){
return regularizedPosition[ cellIndex[c]];},
132 normals, SH3::Colors(),
"regularizedSurf-II.obj");
137 auto surface = SH3::makeDigitalSurface( digitized_shape,
K, params );
138 auto surfels = SH3::getSurfelRange(
surface, params );
144 auto secondenergy = regul.
regularize(10,1.0,0.1);
145 auto thirdenergy = regul.
regularize(10,1.0,0.1);
150 REQUIRE( energy > secondenergy );
151 REQUIRE( secondenergy > thirdenergy );
156 auto surface = SH3::makeDigitalSurface( digitized_shape,
K, params );
157 auto surfels = SH3::getSurfelRange(
surface, params );
165 std::vector<double> alphas(original.size(),0.001);
166 std::vector<double> betas(original.size(),1.0);
167 std::vector<double> gammas(original.size(), 0.05);
171 regul2.
init(alphas,betas,gammas);
173 auto energybis = regul2.
regularize(10,1.0,0.1);
174 REQUIRE( energy == energybis );
180 SH3::saveOBJ(
surface, [&] (
const SH3::Cell &c){
return regularizedPosition[ cellIndex[c]];},
181 normals, SH3::Colors(),
"regularizedSurf-local.obj");
186 for(
size_t i = 0 ; i < original.size(); ++i)
187 if (original[i][0]<0.0)
190 betas[i] = 0.0000001;
193 regul3.init(alphas,betas,gammas);
194 regul3.attachConvolvedTrivialNormalVectors(params);
195 energybis = regul3.regularize();
198 regularizedPosition = regul3.getRegularizedPositions();
199 SH3::saveOBJ(
surface, [&] (
const SH3::Cell &c){
return regularizedPosition[ cellIndex[c]];},
200 normals, SH3::Colors(),
"regularizedSurf-localsplit.obj");