Point Cloud Library (PCL) 1.12.0
Loading...
Searching...
No Matches
bivariate_polynomial.h
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Point Cloud Library (PCL) - www.pointclouds.org
5 * Copyright (c) 2010-2012, Willow Garage, Inc.
6 *
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * * Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * * Redistributions in binary form must reproduce the above
16 * copyright notice, this list of conditions and the following
17 * disclaimer in the documentation and/or other materials provided
18 * with the distribution.
19 * * Neither the name of the copyright holder(s) nor the names of its
20 * contributors may be used to endorse or promote products derived
21 * from this software without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 *
36 * $Id$
37 *
38 */
39
40#pragma once
41
42#include <fstream>
43#include <iostream>
44#include <vector>
45
46namespace pcl
47{
48 /** \brief This represents a bivariate polynomial and provides some functionality for it
49 * \author Bastian Steder
50 * \ingroup common
51 */
52 template<typename real>
54 {
55 public:
56 //-----CONSTRUCTOR&DESTRUCTOR-----
57 /** Constructor */
58 BivariatePolynomialT (int new_degree=0);
59 /** Copy constructor */
61 /** Destructor */
63
64 //-----OPERATORS-----
65 /** = operator */
67 operator= (const BivariatePolynomialT& other) { deepCopy (other); return *this;}
68
69 //-----METHODS-----
70 /** Initialize members to default values */
71 void
72 setDegree (int new_degree);
73
74 /** How many parameters has a bivariate polynomial with this degree */
75 unsigned int
77
78 /** Calculate the value of the polynomial at the given point */
79 real
80 getValue (real x, real y) const;
81
82 /** Calculate the gradient of this polynomial
83 * If forceRecalc is false, it will do nothing when the gradient already exists */
84 void
85 calculateGradient (bool forceRecalc=false);
86
87 /** Calculate the value of the gradient at the given point */
88 void
89 getValueOfGradient (real x, real y, real& gradX, real& gradY);
90
91 /** Returns critical points of the polynomial. type can be 0=maximum, 1=minimum, or 2=saddle point
92 * !!Currently only implemented for degree 2!! */
93 void
94 findCriticalPoints (std::vector<real>& x_values, std::vector<real>& y_values, std::vector<int>& types) const;
95
96 /** write as binary to a stream */
97 void
98 writeBinary (std::ostream& os) const;
99
100 /** write as binary into a file */
101 void
102 writeBinary (const char* filename) const;
103
104 /** read binary from a stream */
105 void
106 readBinary (std::istream& os);
107
108 /** read binary from a file */
109 void
110 readBinary (const char* filename);
111
112 /** How many parameters has a bivariate polynomial of the given degree */
113 static unsigned int
114 getNoOfParametersFromDegree (int n) { return ((n+2)* (n+1))/2;}
115
116 //-----VARIABLES-----
120
121 protected:
122 //-----METHODS-----
123 /** Delete all members */
124 void
125 memoryCleanUp ();
126
127 /** Create a deep copy of the given polynomial */
128 void
130 //-----VARIABLES-----
131 };
132
133 template<typename real>
134 std::ostream&
135 operator<< (std::ostream& os, const BivariatePolynomialT<real>& p);
136
139
140} // end namespace
141
142#include <pcl/common/impl/bivariate_polynomial.hpp>
This represents a bivariate polynomial and provides some functionality for it.
BivariatePolynomialT & operator=(const BivariatePolynomialT &other)
= operator
void deepCopy(const BivariatePolynomialT< real > &other)
Create a deep copy of the given polynomial.
void findCriticalPoints(std::vector< real > &x_values, std::vector< real > &y_values, std::vector< int > &types) const
Returns critical points of the polynomial.
BivariatePolynomialT(int new_degree=0)
Constructor.
void memoryCleanUp()
Delete all members.
void readBinary(std::istream &os)
read binary from a stream
void writeBinary(std::ostream &os) const
write as binary to a stream
BivariatePolynomialT< real > * gradient_y
real getValue(real x, real y) const
Calculate the value of the polynomial at the given point.
void calculateGradient(bool forceRecalc=false)
Calculate the gradient of this polynomial If forceRecalc is false, it will do nothing when the gradie...
unsigned int getNoOfParameters() const
How many parameters has a bivariate polynomial with this degree.
void setDegree(int new_degree)
Initialize members to default values.
static unsigned int getNoOfParametersFromDegree(int n)
How many parameters has a bivariate polynomial of the given degree.
BivariatePolynomialT< real > * gradient_x
void getValueOfGradient(real x, real y, real &gradX, real &gradY)
Calculate the value of the gradient at the given point.
std::ostream & operator<<(std::ostream &os, const BivariatePolynomialT< real > &p)