// Copyright (c) 2005 INRIA Sophia-Antipolis (France). // All rights reserved. // // This file is part of CGAL (www.cgal.org). // // $URL: https://github.com/CGAL/cgal/blob/v5.2/Principal_component_analysis/include/CGAL/linear_least_squares_fitting_2.h $ // $Id: linear_least_squares_fitting_2.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Pierre Alliez and Sylvain Pion and Ankit Gupta #ifndef CGAL_LINEAR_LEAST_SQUARES_FITTING_2_H #define CGAL_LINEAR_LEAST_SQUARES_FITTING_2_H #include #include //#include //#include #include #include #include #include #include #include #include #include namespace CGAL { template < typename InputIterator, typename Kernel, typename Tag, typename DiagonalizeTraits> inline typename Kernel::FT linear_least_squares_fitting_2(InputIterator first, InputIterator beyond, typename Kernel::Line_2& line, typename Kernel::Point_2& centroid, const Tag& tag, const Kernel& kernel, const DiagonalizeTraits& diagonalize_traits) { typedef typename std::iterator_traits::value_type Value_type; return internal::linear_least_squares_fitting_2(first, beyond, line, centroid,(Value_type*)nullptr,kernel,tag, diagonalize_traits); } // deduces the kernel from the points in container. // Use default DiagonalizeTraits template < typename InputIterator, typename Line, typename Point, typename Tag> inline typename Kernel_traits::Kernel::FT linear_least_squares_fitting_2(InputIterator first, InputIterator beyond, Line& line, Point& centroid, const Tag& tag) { typedef typename std::iterator_traits::value_type Value_type; typedef typename Kernel_traits::Kernel Kernel; return CGAL::linear_least_squares_fitting_2 (first,beyond,line,centroid,tag,Kernel(), Default_diagonalize_traits()); } template < typename InputIterator, typename Line, typename Tag> inline typename Kernel_traits::Kernel::FT linear_least_squares_fitting_2(InputIterator first, InputIterator beyond, Line& line, const Tag& tag) { typedef typename std::iterator_traits::value_type Value_type; typedef typename Kernel_traits::Kernel Kernel; typename Kernel::Point_2 centroid; // unused return CGAL::linear_least_squares_fitting_2(first,beyond,line,centroid,tag,Kernel(), Default_diagonalize_traits()); } } //namespace CGAL #endif // CGAL_LINEAR_LEAST_SQUARES_FITTING_2_H