Point Cloud Library (PCL)
1.7.1
Main Page
Modules
Namespaces
Classes
common
include
pcl
common
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
#ifndef BIVARIATE_POLYNOMIAL_H
40
#define BIVARIATE_POLYNOMIAL_H
41
42
#include <fstream>
43
#include <iostream>
44
45
namespace
pcl
46
{
47
/** \brief This represents a bivariate polynomial and provides some functionality for it
48
* \author Bastian Steder
49
* \ingroup common
50
*/
51
template
<
typename
real>
52
class
BivariatePolynomialT
53
{
54
public
:
55
//-----CONSTRUCTOR&DESTRUCTOR-----
56
/** Constructor */
57
BivariatePolynomialT
(
int
new_degree=0);
58
/** Copy constructor */
59
BivariatePolynomialT
(
const
BivariatePolynomialT
& other);
60
/** Destructor */
61
~BivariatePolynomialT
();
62
63
//-----OPERATORS-----
64
/** = operator */
65
BivariatePolynomialT
&
66
operator=
(
const
BivariatePolynomialT
& other) {
deepCopy
(other);
return
*
this
;}
67
68
//-----METHODS-----
69
/** Initialize members to default values */
70
void
71
setDegree
(
int
new_degree);
72
73
/** How many parametes has a bivariate polynomial with this degree */
74
unsigned
int
75
getNoOfParameters
()
const
{
return
getNoOfParametersFromDegree
(
degree
);}
76
77
/** Calculate the value of the polynomial at the given point */
78
real
79
getValue
(real x, real y)
const
;
80
81
/** Calculate the gradient of this polynomial
82
* If forceRecalc is false, it will do nothing when the gradient already exists */
83
void
84
calculateGradient
(
bool
forceRecalc=
false
);
85
86
/** Calculate the value of the gradient at the given point */
87
void
88
getValueOfGradient
(real x, real y, real& gradX, real& gradY);
89
90
/** Returns critical points of the polynomial. type can be 0=maximum, 1=minimum, or 2=saddle point
91
* !!Currently only implemented for degree 2!! */
92
void
93
findCriticalPoints
(std::vector<real>& x_values, std::vector<real>& y_values, std::vector<int>& types)
const
;
94
95
/** write as binary to a stream */
96
void
97
writeBinary
(std::ostream& os)
const
;
98
99
/** write as binary into a file */
100
void
101
writeBinary
(
const
char
* filename)
const
;
102
103
/** read binary from a stream */
104
void
105
readBinary
(std::istream& os);
106
107
/** read binary from a file */
108
void
109
readBinary
(
const
char
* filename);
110
111
/** How many parametes has a bivariate polynomial of the given degree */
112
static
unsigned
int
113
getNoOfParametersFromDegree
(
int
n) {
return
((n+2)* (n+1))/2;}
114
115
//-----VARIABLES-----
116
int
degree
;
117
real*
parameters
;
118
BivariatePolynomialT<real>
*
gradient_x
, *
gradient_y
;
119
120
protected
:
121
//-----METHODS-----
122
/** Delete all members */
123
void
124
memoryCleanUp
();
125
126
/** Create a deep copy of the given polynomial */
127
void
128
deepCopy
(
const
BivariatePolynomialT<real>
& other);
129
//-----VARIABLES-----
130
};
131
132
template
<
typename
real>
133
std::ostream&
134
operator<< (std::ostream& os, const BivariatePolynomialT<real>& p);
135
136
typedef
BivariatePolynomialT<double>
BivariatePolynomiald
;
137
typedef
BivariatePolynomialT<float>
BivariatePolynomial
;
138
139
}
// end namespace
140
141
#include <pcl/common/impl/bivariate_polynomial.hpp>
142
143
#endif