added a Lapack sub-directory in include

This commit is contained in:
Frédéric Cazals 2006-06-23 15:42:57 +00:00
parent 9eaa9ee75b
commit 0da2d9c45a
5 changed files with 191 additions and 222 deletions

View File

@ -9,8 +9,8 @@
#include <boost/property_map.hpp>
#include "../../include/CGAL/Monge_via_jet_fitting.h"
#include "../../include/CGAL/LinAlg_lapack.h"
#include <CGAL/Monge_via_jet_fitting.h>
#include <CGAL/Lapack/Linear_algebra_lapack.h>
#include "PolyhedralSurf.h"
#include "PolyhedralSurf_operations.h"
@ -70,11 +70,19 @@ typedef T_PolyhedralSurf_facet_ops<PolyhedralSurf, Facet_PM_type> Poly_facet_ops
//Kernel for local computations
typedef double LFT;
typedef CGAL::Cartesian<LFT> Local_Kernel;
typedef CGAL::Monge_via_jet_fitting<Data_Kernel, Local_Kernel, Lapack> My_Monge_via_jet_fitting;
typedef CGAL::Monge_rep<Data_Kernel> My_Monge_rep;
typedef CGAL::Monge_info<Local_Kernel> My_Monge_info;
// typedef double LFT;
// typedef CGAL::Cartesian<LFT> Local_Kernel;
// typedef CGAL::Monge_via_jet_fitting<Data_Kernel, Local_Kernel, Lapack> My_Monge_via_jet_fitting;
// typedef CGAL::Monge_form<Data_Kernel> My_Monge_form;
// typedef CGAL::Monge_form_condition_numbers<Local_Kernel> My_Monge_form_condition_numbers;
typedef double LFT;
typedef CGAL::Cartesian<LFT> Local_Kernel;
typedef CGAL::Monge_via_jet_fitting<Data_Kernel> My_Monge_via_jet_fitting;
typedef My_Monge_via_jet_fitting::Monge_form My_Monge_form;
typedef My_Monge_via_jet_fitting::Monge_form_condition_numbers My_Monge_form_condition_numbers;
//Syntax requirred by Options
static const char *const optv[] = {
@ -241,8 +249,8 @@ int main(int argc, char *argv[])
//initialize
Vertex* v = &(*vitb);
in_points.clear();
My_Monge_rep monge_rep;
My_Monge_info monge_info;
My_Monge_form monge_form;
My_Monge_form_condition_numbers monge_form_condition_numbers;
//gather points around the vertex using rings
gather_fitting_points(v, in_points, vpm);
@ -255,18 +263,18 @@ int main(int argc, char *argv[])
// run the main fct : perform the fitting
My_Monge_via_jet_fitting do_it(in_points.begin(), in_points.end(),
d_fitting, d_monge,
monge_rep, monge_info);
monge_form, monge_form_condition_numbers);
//switch min-max ppal curv/dir wrt the mesh orientation
const DVector normal_mesh = Poly_facet_ops::compute_vertex_average_unit_normal(v, fpm);
monge_rep.comply_wrt_given_normal(normal_mesh);
monge_form.comply_wrt_given_normal(normal_mesh);
//OpenGL output. Scaling for ppal dir, may be optimized with a
//global mean edges length computed only once on all edges of P
DFT scale_ppal_dir = Poly_hedge_ops::compute_mean_edges_length_around_vertex(v, hepm)/2;
(*out_4ogl) << v->point() << " ";
monge_rep.dump_4ogl(*out_4ogl, scale_ppal_dir);
monge_form.dump_4ogl(*out_4ogl, scale_ppal_dir);
//verbose txt output
if (verbose) {
@ -277,8 +285,8 @@ int main(int argc, char *argv[])
(*out_verbose) << "--- vertex " << ++nb_vertices_considered
<< " : " << v->point() << std::endl
<< "number of points used : " << in_points.size() << std::endl;
monge_rep.dump_verbose(*out_verbose);
monge_info.dump_verbose(*out_verbose);
monge_form.dump_verbose(*out_verbose);
monge_form_condition_numbers.dump_verbose(*out_verbose);
}
} //all vertices processed

View File

@ -7,19 +7,18 @@
#include <stdlib.h>
#include <vector>
#include "../../include/CGAL/Monge_via_jet_fitting.h"
#include "../../include/CGAL/LinAlg_lapack.h"
#include <CGAL/Monge_via_jet_fitting.h>
typedef double DFT;
typedef CGAL::Cartesian<DFT> Data_Kernel;
typedef Data_Kernel::Point_3 DPoint;
typedef CGAL::Monge_rep<Data_Kernel> My_Monge_rep;
typedef double LFT;
typedef CGAL::Cartesian<LFT> Local_Kernel;
typedef CGAL::Monge_info<Local_Kernel> My_Monge_info;
typedef CGAL::Monge_via_jet_fitting<Data_Kernel, Local_Kernel, Lapack> My_Monge_via_jet_fitting;
typedef CGAL::Monge_via_jet_fitting<Data_Kernel> My_Monge_via_jet_fitting;
typedef My_Monge_via_jet_fitting::Monge_form My_Monge_form;
typedef My_Monge_via_jet_fitting::Monge_form_condition_numbers My_Monge_form_condition_numbers;
int main(int argc, char *argv[])
{
@ -59,12 +58,12 @@ int main(int argc, char *argv[])
// fct parameters
int d_fitting = std::atoi(argv[3]);
int d_monge = std::atoi(argv[4]);
My_Monge_rep monge_rep;
My_Monge_info monge_info;
My_Monge_form monge_form;
My_Monge_form_condition_numbers monge_form_condition_numbers;
//run the main fct
My_Monge_via_jet_fitting do_it(in_points.begin(), in_points.end(),
d_fitting, d_monge,
monge_rep, monge_info);
monge_form, monge_form_condition_numbers);
//open a file for output
char name_out[20];
@ -82,15 +81,15 @@ int main(int argc, char *argv[])
CGAL::set_pretty_mode(outFile);
outFile << "vertex : " << in_points[0] << std::endl
<< "number of points used : " << in_points.size() << std::endl;
monge_rep.dump_verbose(outFile);
monge_info.dump_verbose(outFile);
monge_form.dump_verbose(outFile);
monge_form_condition_numbers.dump_verbose(outFile);
//OUTPUT on std::cout
CGAL::set_pretty_mode(std::cout);
std::cout << "vertex : " << in_points[0] << std::endl
<< "number of points used : " << in_points.size() << std::endl;
monge_rep.dump_verbose(std::cout);
monge_info.dump_verbose(std::cout);
monge_form.dump_verbose(std::cout);
monge_form_condition_numbers.dump_verbose(std::cout);
return 1;
}

View File

@ -24,10 +24,10 @@ CXXFLAGS = \
#---------------------------------------------------------------------#
# linker flags
#---------------------------------------------------------------------#
F2CDIR = $(LAPACK_DIR)/F2CLIBS
LAPACK_LDLIBS = $(LAPACK_DIR)/lapack_LINUX.a \
$(LAPACK_DIR)/blas_LINUX.a $(LAPACK_DIR)/tmglib_LINUX.a \
$(F2CDIR)/libF77.a $(F2CDIR)/libI77.a -lm -lc
LAPACK_LDLIBS = -L$(LAPACK_DIR) -L$(LAPACK_DIR)/F2CLIBS \
-llapack_LINUX \
-lblas_LINUX -ltmglib_LINUX \
-lF77 -lI77 -lm -lc
LIBPATH = \
$(CGAL_LIBPATH)
@ -75,47 +75,31 @@ depend:
blind_1pt.o: /usr/include/stdio.h /usr/include/features.h
blind_1pt.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
blind_1pt.o: /usr/lib/gcc/i386-redhat-linux/3.4.4/include/stddef.h
blind_1pt.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
blind_1pt.o: /usr/include/bits/typesizes.h /usr/include/libio.h
blind_1pt.o: /usr/include/_G_config.h /usr/include/wchar.h
blind_1pt.o: /usr/include/bits/wchar.h /usr/include/gconv.h
blind_1pt.o: /usr/lib/gcc/i386-redhat-linux/3.4.4/include/stdarg.h
blind_1pt.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
blind_1pt.o: /usr/include/stdlib.h /usr/include/sys/types.h
blind_1pt.o: /usr/include/time.h /usr/include/endian.h
blind_1pt.o: /usr/include/bits/endian.h /usr/include/sys/select.h
blind_1pt.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
blind_1pt.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
blind_1pt.o: /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h
blind_1pt.o: /usr/include/alloca.h ../../include/CGAL/Monge_via_jet_fitting.h
blind_1pt.o: ../../include/CGAL/jet_fitting_3_assertions.h
blind_1pt.o: /usr/include/math.h /usr/include/bits/huge_val.h
blind_1pt.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h
blind_1pt.o: ../../include/CGAL/LinAlg_lapack.h
blind_1pt.o: /usr/include/stdlib.h
blind.o: /usr/include/stdio.h /usr/include/features.h
blind.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
blind.o: /usr/lib/gcc/i386-redhat-linux/3.4.4/include/stddef.h
blind.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
blind.o: /usr/include/bits/typesizes.h /usr/include/libio.h
blind.o: /usr/include/_G_config.h /usr/include/wchar.h
blind.o: /usr/include/bits/wchar.h /usr/include/gconv.h
blind.o: /usr/lib/gcc/i386-redhat-linux/3.4.4/include/stdarg.h
blind.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
blind.o: /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h
blind.o: /usr/include/endian.h /usr/include/bits/endian.h
blind.o: /usr/include/sys/select.h /usr/include/bits/select.h
blind.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
blind.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h
blind.o: /usr/include/bits/sched.h /usr/include/alloca.h
blind.o: /usr/include/boost/property_map.hpp /usr/include/boost/config.hpp
blind.o: /usr/include/boost/config/user.hpp
blind.o: /usr/include/stdlib.h /usr/include/boost/property_map.hpp
blind.o: /usr/include/boost/config.hpp /usr/include/boost/config/user.hpp
blind.o: /usr/include/boost/config/select_compiler_config.hpp
blind.o: /usr/include/boost/config/compiler/gcc.hpp
blind.o: /usr/include/boost/config/select_stdlib_config.hpp
blind.o: /usr/include/boost/config/select_platform_config.hpp
blind.o: /usr/include/boost/config/posix_features.hpp /usr/include/unistd.h
blind.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h
blind.o: /usr/include/getopt.h /usr/include/boost/config/suffix.hpp
blind.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h
blind.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h
blind.o: /usr/include/bits/posix2_lim.h
blind.o: /usr/include/boost/config/suffix.hpp /usr/include/limits.h
blind.o: /usr/lib/gcc/i386-redhat-linux/3.4.4/include/limits.h
blind.o: /usr/include/boost/pending/cstddef.hpp
blind.o: /usr/include/boost/detail/iterator.hpp /usr/include/boost/config.hpp
blind.o: /usr/include/boost/concept_check.hpp /usr/include/boost/iterator.hpp
@ -163,10 +147,7 @@ blind.o: /usr/include/boost/mpl/aux_/config/lambda.hpp
blind.o: /usr/include/boost/mpl/aux_/config/ttp.hpp
blind.o: /usr/include/boost/mpl/aux_/config/ctps.hpp
blind.o: /usr/include/boost/mpl/aux_/config/overload_resolution.hpp
blind.o: /usr/include/boost/type_traits/integral_constant.hpp
blind.o: /usr/include/boost/mpl/bool.hpp /usr/include/boost/mpl/bool_fwd.hpp
blind.o: /usr/include/boost/mpl/integral_c.hpp
blind.o: /usr/include/boost/mpl/integral_c_fwd.hpp
blind.o: /usr/include/boost/mpl/aux_/lambda_support.hpp
blind.o: /usr/include/boost/type_traits/detail/bool_trait_undef.hpp
blind.o: /usr/include/boost/type_traits/add_reference.hpp
@ -178,17 +159,7 @@ blind.o: /usr/include/boost/type_traits/detail/ice_or.hpp
blind.o: /usr/include/boost/type_traits/detail/ice_and.hpp
blind.o: /usr/include/boost/type_traits/detail/ice_not.hpp
blind.o: /usr/include/boost/type_traits/detail/ice_eq.hpp
blind.o: /usr/include/boost/type_traits/is_arithmetic.hpp
blind.o: /usr/include/boost/type_traits/is_integral.hpp
blind.o: /usr/include/boost/type_traits/is_float.hpp
blind.o: /usr/include/boost/type_traits/is_abstract.hpp
blind.o: /usr/include/boost/static_assert.hpp
blind.o: /usr/include/boost/type_traits/is_class.hpp
blind.o: /usr/include/boost/type_traits/is_union.hpp
blind.o: /usr/include/boost/type_traits/remove_cv.hpp
blind.o: /usr/include/boost/type_traits/broken_compiler_spec.hpp
blind.o: /usr/include/boost/type_traits/detail/cv_traits_impl.hpp
blind.o: /usr/include/boost/type_traits/intrinsics.hpp
blind.o: /usr/include/boost/mpl/identity.hpp
blind.o: /usr/include/boost/mpl/aux_/na_spec.hpp
blind.o: /usr/include/boost/mpl/lambda_fwd.hpp
@ -223,12 +194,8 @@ blind.o: /usr/include/boost/preprocessor/control/detail/while.hpp
blind.o: /usr/include/boost/preprocessor/tuple/elem.hpp
blind.o: /usr/include/boost/preprocessor/arithmetic/sub.hpp
blind.o: /usr/include/boost/mpl/aux_/config/eti.hpp
blind.o: /usr/include/boost/concept_archetype.hpp
blind.o: ../../include/CGAL/Monge_via_jet_fitting.h
blind.o: ../../include/CGAL/jet_fitting_3_assertions.h /usr/include/math.h
blind.o: /usr/include/bits/huge_val.h /usr/include/bits/mathdef.h
blind.o: /usr/include/bits/mathcalls.h ../../include/CGAL/LinAlg_lapack.h
blind.o: PolyhedralSurf.h /usr/include/boost/graph/properties.hpp
blind.o: /usr/include/boost/concept_archetype.hpp PolyhedralSurf.h
blind.o: /usr/include/boost/graph/properties.hpp
blind.o: /usr/include/boost/pending/property.hpp
blind.o: /usr/include/boost/pending/ct_if.hpp
blind.o: /usr/include/boost/pending/detail/property.hpp
@ -243,21 +210,23 @@ blind.o: /usr/include/boost/type_traits/add_const.hpp
blind.o: /usr/include/boost/type_traits/add_volatile.hpp
blind.o: /usr/include/boost/type_traits/add_cv.hpp
blind.o: /usr/include/boost/type_traits/is_const.hpp
blind.o: /usr/include/boost/type_traits/detail/cv_traits_impl.hpp
blind.o: /usr/include/boost/type_traits/is_volatile.hpp
blind.o: /usr/include/boost/type_traits/remove_const.hpp
blind.o: /usr/include/boost/type_traits/broken_compiler_spec.hpp
blind.o: /usr/include/boost/type_traits/remove_volatile.hpp
blind.o: /usr/include/boost/type_traits/remove_cv.hpp
blind.o: /usr/include/boost/type_traits/function_traits.hpp
blind.o: /usr/include/boost/type_traits/is_function.hpp
blind.o: /usr/include/boost/type_traits/detail/false_result.hpp
blind.o: /usr/include/boost/type_traits/detail/is_function_ptr_helper.hpp
blind.o: /usr/include/boost/type_traits/add_pointer.hpp
blind.o: /usr/include/boost/type_traits/remove_reference.hpp
blind.o: /usr/include/boost/mpl/if.hpp
blind.o: /usr/include/boost/mpl/aux_/value_wknd.hpp
blind.o: /usr/include/boost/mpl/aux_/config/integral.hpp
blind.o: /usr/include/boost/iterator/iterator_categories.hpp
blind.o: /usr/include/boost/iterator/detail/config_def.hpp
blind.o: /usr/include/boost/mpl/eval_if.hpp
blind.o: /usr/include/boost/mpl/eval_if.hpp /usr/include/boost/mpl/if.hpp
blind.o: /usr/include/boost/mpl/aux_/value_wknd.hpp
blind.o: /usr/include/boost/mpl/aux_/config/integral.hpp
blind.o: /usr/include/boost/mpl/placeholders.hpp
blind.o: /usr/include/boost/mpl/arg.hpp /usr/include/boost/mpl/arg_fwd.hpp
blind.o: /usr/include/boost/mpl/aux_/na_assert.hpp
@ -281,13 +250,18 @@ blind.o: /usr/include/boost/type_traits/is_pointer.hpp
blind.o: /usr/include/boost/type_traits/is_member_pointer.hpp
blind.o: /usr/include/boost/type_traits/is_member_function_pointer.hpp
blind.o: /usr/include/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
blind.o: /usr/include/boost/type_traits/is_class.hpp
blind.o: /usr/include/boost/type_traits/is_union.hpp
blind.o: /usr/include/boost/type_traits/intrinsics.hpp
blind.o: /usr/include/boost/type_traits/remove_pointer.hpp
blind.o: /usr/include/boost/mpl/not.hpp
blind.o: /usr/include/boost/iterator/detail/enable_if.hpp
blind.o: /usr/include/boost/implicit_cast.hpp
blind.o: /usr/include/boost/type_traits/is_pod.hpp
blind.o: /usr/include/boost/type_traits/is_void.hpp
blind.o: /usr/include/boost/type_traits/is_scalar.hpp
blind.o: /usr/include/boost/type_traits/is_arithmetic.hpp
blind.o: /usr/include/boost/type_traits/is_integral.hpp
blind.o: /usr/include/boost/type_traits/is_float.hpp
blind.o: /usr/include/boost/type_traits/is_enum.hpp
blind.o: /usr/include/boost/mpl/always.hpp /usr/include/boost/mpl/apply.hpp
blind.o: /usr/include/boost/mpl/apply_fwd.hpp
@ -316,6 +290,7 @@ blind.o: PolyhedralSurf_operations.h PolyhedralSurf_rings.h options.h
options.o: /usr/include/ctype.h /usr/include/features.h
options.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
options.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h
options.o: /usr/lib/gcc/i386-redhat-linux/3.4.4/include/stddef.h
options.o: /usr/include/bits/typesizes.h /usr/include/endian.h
options.o: /usr/include/bits/endian.h /usr/include/string.h options.h
PolyhedralSurf.o: PolyhedralSurf.h /usr/include/boost/property_map.hpp
@ -325,16 +300,10 @@ PolyhedralSurf.o: /usr/include/boost/config/select_compiler_config.hpp
PolyhedralSurf.o: /usr/include/boost/config/compiler/gcc.hpp
PolyhedralSurf.o: /usr/include/boost/config/select_stdlib_config.hpp
PolyhedralSurf.o: /usr/include/boost/config/select_platform_config.hpp
PolyhedralSurf.o: /usr/include/boost/config/posix_features.hpp
PolyhedralSurf.o: /usr/include/unistd.h /usr/include/features.h
PolyhedralSurf.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
PolyhedralSurf.o: /usr/include/bits/posix_opt.h /usr/include/bits/types.h
PolyhedralSurf.o: /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h
PolyhedralSurf.o: /usr/include/bits/confname.h /usr/include/getopt.h
PolyhedralSurf.o: /usr/include/boost/config/suffix.hpp /usr/include/limits.h
PolyhedralSurf.o: /usr/include/bits/posix1_lim.h
PolyhedralSurf.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h
PolyhedralSurf.o: /usr/include/bits/posix2_lim.h
PolyhedralSurf.o: /usr/include/features.h /usr/include/sys/cdefs.h
PolyhedralSurf.o: /usr/include/gnu/stubs.h
PolyhedralSurf.o: /usr/lib/gcc/i386-redhat-linux/3.4.4/include/limits.h
PolyhedralSurf.o: /usr/include/boost/pending/cstddef.hpp
PolyhedralSurf.o: /usr/include/boost/detail/iterator.hpp
PolyhedralSurf.o: /usr/include/boost/config.hpp
@ -385,11 +354,8 @@ PolyhedralSurf.o: /usr/include/boost/mpl/aux_/config/lambda.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/config/ttp.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/config/ctps.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/config/overload_resolution.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/integral_constant.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/bool.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/bool_fwd.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/integral_c.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/integral_c_fwd.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/lambda_support.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/bool_trait_undef.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/add_reference.hpp
@ -401,17 +367,7 @@ PolyhedralSurf.o: /usr/include/boost/type_traits/detail/ice_or.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/ice_and.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/ice_not.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/ice_eq.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_arithmetic.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_integral.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_float.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_abstract.hpp
PolyhedralSurf.o: /usr/include/boost/static_assert.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_class.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_union.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/remove_cv.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/broken_compiler_spec.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/cv_traits_impl.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/intrinsics.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/identity.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/na_spec.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/lambda_fwd.hpp
@ -463,21 +419,24 @@ PolyhedralSurf.o: /usr/include/boost/type_traits/add_const.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/add_volatile.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/add_cv.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_const.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/cv_traits_impl.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_volatile.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/remove_const.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/broken_compiler_spec.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/remove_volatile.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/remove_cv.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/function_traits.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_function.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/false_result.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/is_function_ptr_helper.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/add_pointer.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/remove_reference.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/if.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/value_wknd.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/config/integral.hpp
PolyhedralSurf.o: /usr/include/boost/iterator/iterator_categories.hpp
PolyhedralSurf.o: /usr/include/boost/iterator/detail/config_def.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/eval_if.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/if.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/value_wknd.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/config/integral.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/placeholders.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/arg.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/arg_fwd.hpp
@ -502,13 +461,18 @@ PolyhedralSurf.o: /usr/include/boost/type_traits/is_pointer.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_member_pointer.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_member_function_pointer.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_class.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_union.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/intrinsics.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/remove_pointer.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/not.hpp
PolyhedralSurf.o: /usr/include/boost/iterator/detail/enable_if.hpp
PolyhedralSurf.o: /usr/include/boost/implicit_cast.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_pod.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_void.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_scalar.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_arithmetic.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_integral.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_float.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_enum.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/always.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/apply.hpp
@ -536,16 +500,15 @@ PolyhedralSurf.o: /usr/include/boost/mpl/quote.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/void.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/has_type.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/template_arity.hpp
PolyhedralSurf.o: /usr/include/stdlib.h /usr/include/sys/types.h
PolyhedralSurf.o: /usr/include/time.h /usr/include/endian.h
PolyhedralSurf.o: /usr/include/bits/endian.h /usr/include/sys/select.h
PolyhedralSurf.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
PolyhedralSurf.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
PolyhedralSurf.o: /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h
PolyhedralSurf.o: /usr/include/alloca.h /usr/include/stdio.h
PolyhedralSurf.o: /usr/include/stdlib.h
PolyhedralSurf.o: /usr/lib/gcc/i386-redhat-linux/3.4.4/include/stddef.h
PolyhedralSurf.o: /usr/include/stdio.h /usr/include/bits/types.h
PolyhedralSurf.o: /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h
PolyhedralSurf.o: /usr/include/libio.h /usr/include/_G_config.h
PolyhedralSurf.o: /usr/include/wchar.h /usr/include/bits/wchar.h
PolyhedralSurf.o: /usr/include/gconv.h /usr/include/bits/stdio_lim.h
PolyhedralSurf.o: /usr/include/gconv.h
PolyhedralSurf.o: /usr/lib/gcc/i386-redhat-linux/3.4.4/include/stdarg.h
PolyhedralSurf.o: /usr/include/bits/stdio_lim.h
PolyhedralSurf.o: /usr/include/bits/sys_errlist.h
PolyhedralSurf.o: /usr/include/boost/property_map.hpp
PolyhedralSurf.o: /usr/include/boost/config.hpp
@ -554,16 +517,10 @@ PolyhedralSurf.o: /usr/include/boost/config/select_compiler_config.hpp
PolyhedralSurf.o: /usr/include/boost/config/compiler/gcc.hpp
PolyhedralSurf.o: /usr/include/boost/config/select_stdlib_config.hpp
PolyhedralSurf.o: /usr/include/boost/config/select_platform_config.hpp
PolyhedralSurf.o: /usr/include/boost/config/posix_features.hpp
PolyhedralSurf.o: /usr/include/unistd.h /usr/include/features.h
PolyhedralSurf.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h
PolyhedralSurf.o: /usr/include/bits/posix_opt.h /usr/include/bits/types.h
PolyhedralSurf.o: /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h
PolyhedralSurf.o: /usr/include/bits/confname.h /usr/include/getopt.h
PolyhedralSurf.o: /usr/include/boost/config/suffix.hpp /usr/include/limits.h
PolyhedralSurf.o: /usr/include/bits/posix1_lim.h
PolyhedralSurf.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h
PolyhedralSurf.o: /usr/include/bits/posix2_lim.h
PolyhedralSurf.o: /usr/include/features.h /usr/include/sys/cdefs.h
PolyhedralSurf.o: /usr/include/gnu/stubs.h
PolyhedralSurf.o: /usr/lib/gcc/i386-redhat-linux/3.4.4/include/limits.h
PolyhedralSurf.o: /usr/include/boost/pending/cstddef.hpp
PolyhedralSurf.o: /usr/include/boost/detail/iterator.hpp
PolyhedralSurf.o: /usr/include/boost/config.hpp
@ -614,11 +571,8 @@ PolyhedralSurf.o: /usr/include/boost/mpl/aux_/config/lambda.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/config/ttp.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/config/ctps.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/config/overload_resolution.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/integral_constant.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/bool.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/bool_fwd.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/integral_c.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/integral_c_fwd.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/lambda_support.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/bool_trait_undef.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/add_reference.hpp
@ -630,17 +584,7 @@ PolyhedralSurf.o: /usr/include/boost/type_traits/detail/ice_or.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/ice_and.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/ice_not.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/ice_eq.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_arithmetic.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_integral.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_float.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_abstract.hpp
PolyhedralSurf.o: /usr/include/boost/static_assert.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_class.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_union.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/remove_cv.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/broken_compiler_spec.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/cv_traits_impl.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/intrinsics.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/identity.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/na_spec.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/lambda_fwd.hpp
@ -692,21 +636,24 @@ PolyhedralSurf.o: /usr/include/boost/type_traits/add_const.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/add_volatile.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/add_cv.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_const.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/cv_traits_impl.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_volatile.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/remove_const.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/broken_compiler_spec.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/remove_volatile.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/remove_cv.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/function_traits.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_function.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/false_result.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/is_function_ptr_helper.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/add_pointer.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/remove_reference.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/if.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/value_wknd.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/config/integral.hpp
PolyhedralSurf.o: /usr/include/boost/iterator/iterator_categories.hpp
PolyhedralSurf.o: /usr/include/boost/iterator/detail/config_def.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/eval_if.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/if.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/value_wknd.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/config/integral.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/placeholders.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/arg.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/arg_fwd.hpp
@ -731,13 +678,18 @@ PolyhedralSurf.o: /usr/include/boost/type_traits/is_pointer.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_member_pointer.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_member_function_pointer.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_class.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_union.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/intrinsics.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/remove_pointer.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/not.hpp
PolyhedralSurf.o: /usr/include/boost/iterator/detail/enable_if.hpp
PolyhedralSurf.o: /usr/include/boost/implicit_cast.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_pod.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_void.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_scalar.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_arithmetic.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_integral.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_float.hpp
PolyhedralSurf.o: /usr/include/boost/type_traits/is_enum.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/always.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/apply.hpp
@ -765,14 +717,13 @@ PolyhedralSurf.o: /usr/include/boost/mpl/quote.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/void.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/has_type.hpp
PolyhedralSurf.o: /usr/include/boost/mpl/aux_/template_arity.hpp
PolyhedralSurf.o: /usr/include/stdlib.h /usr/include/sys/types.h
PolyhedralSurf.o: /usr/include/time.h /usr/include/endian.h
PolyhedralSurf.o: /usr/include/bits/endian.h /usr/include/sys/select.h
PolyhedralSurf.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
PolyhedralSurf.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
PolyhedralSurf.o: /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h
PolyhedralSurf.o: /usr/include/alloca.h /usr/include/stdio.h
PolyhedralSurf.o: /usr/include/stdlib.h
PolyhedralSurf.o: /usr/lib/gcc/i386-redhat-linux/3.4.4/include/stddef.h
PolyhedralSurf.o: /usr/include/stdio.h /usr/include/bits/types.h
PolyhedralSurf.o: /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h
PolyhedralSurf.o: /usr/include/libio.h /usr/include/_G_config.h
PolyhedralSurf.o: /usr/include/wchar.h /usr/include/bits/wchar.h
PolyhedralSurf.o: /usr/include/gconv.h /usr/include/bits/stdio_lim.h
PolyhedralSurf.o: /usr/include/gconv.h
PolyhedralSurf.o: /usr/lib/gcc/i386-redhat-linux/3.4.4/include/stdarg.h
PolyhedralSurf.o: /usr/include/bits/stdio_lim.h
PolyhedralSurf.o: /usr/include/bits/sys_errlist.h

View File

@ -1,5 +1,5 @@
#ifndef _LAPACK_H_
#define _LAPACK_H_
#ifndef CGAL_LAPACK_H
#define CGAL_LAPACK_H
#include <stdlib.h>
#include "blaswrap.h"
@ -8,6 +8,7 @@ extern "C" {
#include "clapack.h"
}
namespace CGAL {
////////////////////////class Lapack_matrix/////////////////////
//in Lapack, matrices are one-dimensional arrays
// and elements are column-major ordered
@ -107,4 +108,6 @@ void Lapack::solve_ls_svd_algo(Matrix& M, double* B, double &cond_nb)
free(work);
}
#endif
} // namespace CGAL
#endif // CGAL_LAPACK_H

View File

@ -1,10 +1,11 @@
#ifndef _MONGE_VIA_JET_FITTING_H_
#define _MONGE_VIA_JET_FITTING_H_
#include <CGAL/basic.h>
#include <CGAL/Cartesian.h>
#include <CGAL/circulator.h>
#include <CGAL/Linear_algebraCd.h>
#include "jet_fitting_3_assertions.h"
#include <CGAL/jet_fitting_3_assertions.h>
#include <CGAL/Lapack/Linear_algebra_lapack.h>
//#include <CGAL/eigen.h> //for ALTERNATIVE with CGAL eigen code
@ -12,15 +13,22 @@
CGAL_BEGIN_NAMESPACE
int fact(int n)
{
if (n == 0)
return(1);
return(n * fact(n-1));
// int fact(int n)
// {
// if (n == 0)
// return(1);
// return(n * fact(n-1));
// }
unsigned int fact(unsigned int n){
unsigned int i, p=1;
for(i=2; i<=n; i++) p *= i;
return p;
}
////////////////////// CLASS Monge_rep ////////////////////////
////////////////////// CLASS Monge_form ////////////////////////
template <class DataKernel>
class Monge_rep {
class Monge_form {
public:
typedef typename DataKernel::FT DFT;
typedef typename DataKernel::Point_3 DPoint;
@ -40,14 +48,14 @@ protected:
public:
//constructor
Monge_rep() {
Monge_form() {
m_origin_pt = DPoint(0.,0.,0.);
m_d1 = DVector(0.,0.,0.);
m_d2 = DVector(0.,0.,0.);
m_n = DVector(0.,0.,0.);
m_coefficients = std::vector<DFT>();
}
~Monge_rep() {}
~Monge_form() {}
//access
const DPoint origin_pt() const { return m_origin_pt; }
DPoint& origin_pt() { return m_origin_pt; }
@ -73,14 +81,14 @@ public:
};
template <class DataKernel>
void Monge_rep<DataKernel>::
void Monge_form<DataKernel>::
set_up(int degree) {
if ( degree >= 2 ) std::fill_n(back_inserter(m_coefficients),
(degree+1)*(degree+2)/2-4, 0.);
}
template <class DataKernel>
void Monge_rep<DataKernel>::
void Monge_form<DataKernel>::
comply_wrt_given_normal(const DVector given_normal)
{
if ( given_normal*this->n() < 0 )
@ -102,7 +110,7 @@ comply_wrt_given_normal(const DVector given_normal)
}
template <class DataKernel>
void Monge_rep<DataKernel>::
void Monge_form<DataKernel>::
dump_verbose(std::ostream& out_stream)
{
out_stream << "origin : " << origin_pt() << std::endl
@ -139,7 +147,7 @@ dump_verbose(std::ostream& out_stream)
}
template <class DataKernel>
void Monge_rep<DataKernel>::
void Monge_form<DataKernel>::
dump_4ogl(std::ostream& out_stream, const DFT scale)
{
CGAL_precondition( coefficients().size() >= 2 );
@ -151,9 +159,9 @@ dump_4ogl(std::ostream& out_stream, const DFT scale)
<< std::endl;
}
////////////////////// CLASS Monge_info ////////////////////////
////////////////////// CLASS Monge_form_condition_numbers ////////////////////////
template <class LocalKernel>
class Monge_info {
class Monge_form_condition_numbers {
public:
typedef typename LocalKernel::FT LFT;
typedef typename LocalKernel::Vector_3 LVector;
@ -164,7 +172,7 @@ protected:
public:
//constructor
Monge_info() {
Monge_form_condition_numbers() {
m_cond_nb = 0.;
std::fill_n(m_pca_eigen_vals, 3, 0.);
std::fill_n(m_pca_eigen_vecs, 3, LVector());
@ -182,7 +190,7 @@ public:
template <class LocalKernel>
void Monge_info<LocalKernel>::
void Monge_form_condition_numbers<LocalKernel>::
dump_verbose(std::ostream& out_stream)
{
out_stream << "cond_nb : " << cond_nb() << std::endl
@ -196,21 +204,21 @@ dump_verbose(std::ostream& out_stream)
}
////////////////////// CLASS Monge_via_jet_fitting ////////////////////////
template < class DataKernel, class LocalKernel, class LinAlgTraits>
template < class DataKernel, class LocalKernel = Cartesian<double>, class LinAlgTraits = Lapack>
class Monge_via_jet_fitting {
public:
typedef DataKernel Data_Kernel;
typedef LocalKernel Local_Kernel;
typedef typename std::vector<typename Data_Kernel::Point_3>::iterator Range_Iterator;
typedef Monge_rep<Data_Kernel> Monge_rep;
typedef Monge_info<Local_Kernel> Monge_info;
typedef Monge_form<Data_Kernel> Monge_form;
typedef Monge_form_condition_numbers<Local_Kernel> Monge_form_condition_numbers;
public:
Monge_via_jet_fitting(Range_Iterator begin, Range_Iterator end,
int d, int dprime,
Monge_rep &monge_rep, Monge_info &monge_info);
Monge_form &monge_form, Monge_form_condition_numbers &monge_form_condition_numbers);
protected:
typedef typename Local_Kernel::FT LFT;
@ -240,10 +248,10 @@ protected:
Aff_transformation translate_p0, change_world2fitting,
change_fitting2monge;
//eigen val and vect stored in monge_info,
//eigen val and vect stored in monge_form_condition_numbers,
// change_world2fitting is computed
void compute_PCA(Range_Iterator begin, Range_Iterator end,
Monge_info &monge_info);
Monge_form_condition_numbers &monge_form_condition_numbers);
//Coordinates of input points are computed in the fitting basis with
// p0 as origin.
@ -253,18 +261,18 @@ protected:
//A is computed, solving MA=Z in the ls sense, the solution A is stored in Z
//Preconditionning is needed
//the condition number of the matrix M is stored in monge_info
void solve_linear_system(LAMatrix &M, LFT* Z, Monge_info& monge_info);
//the condition number of the matrix M is stored in monge_form_condition_numbers
void solve_linear_system(LAMatrix &M, LFT* Z, Monge_form_condition_numbers& monge_form_condition_numbers);
//Classical differential geometric calculus
//change_fitting2monge is computed
//if deg_monge =1 only 1st order info
//if deg_monge >= 2 2nd order info are computed
void compute_Monge_basis(const LFT* A, Monge_rep& monge_rep);
void compute_Monge_basis(const LFT* A, Monge_form& monge_form);
//if deg_monge >=3 then 3rd (and 4th) order info are computed
void compute_Monge_coefficients(LFT* A, int dprime,
Monge_rep& monge_rep);
Monge_form& monge_form);
//for a trihedron (v1,v2,v3) switches v1 to -v1 if det(v1,v2,v3) < 0
void switch_to_direct_orientation(LVector& v1, const LVector& v2,
@ -279,8 +287,8 @@ template < class DataKernel, class LocalKernel, class LinAlgTraits>
Monge_via_jet_fitting<DataKernel, LocalKernel, LinAlgTraits>::
Monge_via_jet_fitting(Range_Iterator begin, Range_Iterator end,
int d, int dprime,
Monge_rep& monge_rep,
Monge_info& monge_info)
Monge_form& monge_form,
Monge_form_condition_numbers& monge_form_condition_numbers)
{
// precondition: on the degrees, jet and monge
CGAL_precondition( (d >=1) && (dprime >= 1)
@ -293,22 +301,22 @@ Monge_via_jet_fitting(Range_Iterator begin, Range_Iterator end,
CGAL_precondition( nb_input_pts >= nb_d_jet_coeff );
//Initialize
monge_rep.set_up(dprime);
monge_form.set_up(dprime);
//for the system MA=Z
LAMatrix M(nb_input_pts, nb_d_jet_coeff);
LFT* Z = (LFT*) malloc(nb_input_pts*sizeof(LFT));
compute_PCA(begin, end, monge_info);
compute_PCA(begin, end, monge_form_condition_numbers);
fill_matrix(begin, end, d, M, Z);//with precond
solve_linear_system(M, Z, monge_info); //correct with precond
compute_Monge_basis(Z, monge_rep);
if ( dprime >= 3) compute_Monge_coefficients(Z, dprime, monge_rep);
solve_linear_system(M, Z, monge_form_condition_numbers); //correct with precond
compute_Monge_basis(Z, monge_form);
if ( dprime >= 3) compute_Monge_coefficients(Z, dprime, monge_form);
}
template < class DataKernel, class LocalKernel, class LinAlgTraits>
void Monge_via_jet_fitting<DataKernel, LocalKernel, LinAlgTraits>::
compute_PCA(Range_Iterator begin, Range_Iterator end,
Monge_info &monge_info)
Monge_form_condition_numbers &monge_form_condition_numbers)
{
LAMatrix Cov(3,3);
LFT* eval = (LFT*) malloc(3*sizeof(LFT));
@ -356,25 +364,25 @@ compute_PCA(Range_Iterator begin, Range_Iterator end,
// eigen vectors are sorted in accordance.
LinAlgTraits::eigen_symm_algo(Cov, eval, evec);
//store in monge_info, pca eigenvalues are stored in descending order
monge_info.pca_eigen_vals()[0] = eval[2];//implicit cast LAFT->LFT
//store in monge_form_condition_numbers, pca eigenvalues are stored in descending order
monge_form_condition_numbers.pca_eigen_vals()[0] = eval[2];//implicit cast LAFT->LFT
LVector temp_vectn(evec.get_elt(0,2),evec.get_elt(1,2),evec.get_elt(2,2));
monge_info.pca_eigen_vecs()[0] = temp_vectn;
monge_form_condition_numbers.pca_eigen_vecs()[0] = temp_vectn;
monge_info.pca_eigen_vals()[1] = eval[1];
monge_form_condition_numbers.pca_eigen_vals()[1] = eval[1];
LVector temp_vect1(evec.get_elt(0,1),evec.get_elt(1,1),evec.get_elt(2,1));
monge_info.pca_eigen_vecs()[1] = temp_vect1;
monge_form_condition_numbers.pca_eigen_vecs()[1] = temp_vect1;
monge_info.pca_eigen_vals()[2] = eval[0];
monge_form_condition_numbers.pca_eigen_vals()[2] = eval[0];
LVector temp_vect2(evec.get_elt(0,0),evec.get_elt(1,0),evec.get_elt(2,0));
monge_info.pca_eigen_vecs()[2] = temp_vect2;
monge_form_condition_numbers.pca_eigen_vecs()[2] = temp_vect2;
switch_to_direct_orientation(monge_info.pca_eigen_vecs()[0],
monge_info.pca_eigen_vecs()[1],
monge_info.pca_eigen_vecs()[2]);
switch_to_direct_orientation(monge_form_condition_numbers.pca_eigen_vecs()[0],
monge_form_condition_numbers.pca_eigen_vecs()[1],
monge_form_condition_numbers.pca_eigen_vecs()[2]);
//Store the change of basis W->F
const LVector* pca_vecs = monge_info.pca_eigen_vecs();
const LVector* pca_vecs = monge_form_condition_numbers.pca_eigen_vecs();
Aff_transformation
change_basis (pca_vecs[0][0], pca_vecs[0][1], pca_vecs[0][2],
pca_vecs[1][0], pca_vecs[1][1], pca_vecs[1][2],
@ -382,7 +390,7 @@ compute_PCA(Range_Iterator begin, Range_Iterator end,
this->change_world2fitting = change_basis;
/* //debug //test the old method, fitting basis is a permutation of the world basis */
/* const LVector* pca_vecs = monge_info.pca_eigen_vecs(); */
/* const LVector* pca_vecs = monge_form_condition_numbers.pca_eigen_vecs(); */
/* const LVector n_pca = pca_vecs[2]; */
/* int index_max=0; */
/* x = std::fabs(n_pca[0]); y = std::fabs(n_pca[1]); z = std::fabs(n_pca[2]); */
@ -449,16 +457,16 @@ fill_matrix(Range_Iterator begin, Range_Iterator end,
template < class DataKernel, class LocalKernel, class LinAlgTraits>
void Monge_via_jet_fitting<DataKernel, LocalKernel, LinAlgTraits>::
solve_linear_system(LAMatrix &M, LFT* Z, Monge_info& monge_info)
solve_linear_system(LAMatrix &M, LFT* Z, Monge_form_condition_numbers& monge_form_condition_numbers)
{
LinAlgTraits::solve_ls_svd_algo(M, Z, monge_info.cond_nb());
LinAlgTraits::solve_ls_svd_algo(M, Z, monge_form_condition_numbers.cond_nb());
for (int k=0; k <= this->deg; k++) for (int i=0; i<=k; i++)
Z[k*(k+1)/2+i] /= std::pow(this->preconditionning,k);
}
template < class DataKernel, class LocalKernel, class LinAlgTraits>
void Monge_via_jet_fitting<DataKernel, LocalKernel, LinAlgTraits>::
compute_Monge_basis(const LFT* A, Monge_rep& monge_rep)
compute_Monge_basis(const LFT* A, Monge_form& monge_form)
{
// only 1st order info.
if ( this->deg_monge == 1 ) {
@ -466,10 +474,10 @@ compute_Monge_basis(const LFT* A, Monge_rep& monge_rep)
LVector normal(-A[1], -A[2], 1.);
LFT norm2 = normal * normal;
normal = normal / Lsqrt(norm2);
monge_rep.origin_pt() =
monge_form.origin_pt() =
(this->translate_p0.inverse() *
this->change_world2fitting.inverse()) (orig_monge );
monge_rep.n() = this->change_world2fitting.inverse()(normal);
monge_form.n() = this->change_world2fitting.inverse()(normal);
}
// else (deg_monge >= 2) then 2nd order info are computed
else {
@ -538,14 +546,14 @@ compute_Monge_basis(const LFT* A, Monge_rep& monge_rep)
//store the monge basis origin and vectors with their world coord
//store ppal curv
monge_rep.origin_pt() =
monge_form.origin_pt() =
(this->translate_p0.inverse() *
this->change_world2fitting.inverse()) (orig_monge );
monge_rep.d1() = this->change_world2fitting.inverse()(d_max);
monge_rep.d2() = this->change_world2fitting.inverse()(d_min);
monge_rep.n() = this->change_world2fitting.inverse()(normal);
monge_rep.coefficients()[0] = eval[1];
monge_rep.coefficients()[1] = eval[0];
monge_form.d1() = this->change_world2fitting.inverse()(d_max);
monge_form.d2() = this->change_world2fitting.inverse()(d_min);
monge_form.n() = this->change_world2fitting.inverse()(normal);
monge_form.coefficients()[0] = eval[1];
monge_form.coefficients()[1] = eval[0];
}
//end else
}
@ -553,7 +561,7 @@ compute_Monge_basis(const LFT* A, Monge_rep& monge_rep)
template < class DataKernel, class LocalKernel, class LinAlgTraits>
void Monge_via_jet_fitting<DataKernel, LocalKernel, LinAlgTraits>::
compute_Monge_coefficients(LFT* A, int dprime,
Monge_rep& monge_rep)
Monge_form& monge_form)
{
//One has the equation w=J_A(u,v) of the fitted surface S
// in the fitting_basis
@ -683,10 +691,10 @@ compute_Monge_coefficients(LFT* A, int dprime,
LFT b2 = 1/(f3*f3)*(-f122*f3+f13*f22);
LFT b3 = -1/(f3*f3)*(f222*f3-3*f23*f22);
monge_rep.coefficients()[2] = b0;
monge_rep.coefficients()[3] = b1;
monge_rep.coefficients()[4] = b2;
monge_rep.coefficients()[5] = b3;
monge_form.coefficients()[2] = b0;
monge_form.coefficients()[3] = b1;
monge_form.coefficients()[4] = b2;
monge_form.coefficients()[5] = b3;
if ( dprime == 4 )
{
@ -742,11 +750,11 @@ compute_Monge_coefficients(LFT* A, int dprime,
LFT c4 =
-1/(f3*f3*f3)*(f2222*(f3*f3)+3*f33*f22*f22-6*f223*f3*f22-4*f23*f3*f222+12*f23*f23*f22) ;
monge_rep.coefficients()[6] = c0;
monge_rep.coefficients()[7] = c1;
monge_rep.coefficients()[8] = c2;
monge_rep.coefficients()[9] = c3;
monge_rep.coefficients()[10] = c4;
monge_form.coefficients()[6] = c0;
monge_form.coefficients()[7] = c1;
monge_form.coefficients()[8] = c2;
monge_form.coefficients()[9] = c3;
monge_form.coefficients()[10] = c4;
}
}