Developer Documentation

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
QuadricT.hh
1 /*===========================================================================*\
2 * *
3 * OpenFlipper *
4 * Copyright (c) 2001-2015, RWTH-Aachen University *
5 * Department of Computer Graphics and Multimedia *
6 * All rights reserved. *
7 * www.openflipper.org *
8 * *
9 *---------------------------------------------------------------------------*
10 * This file is part of OpenFlipper. *
11 *---------------------------------------------------------------------------*
12 * *
13 * Redistribution and use in source and binary forms, with or without *
14 * modification, are permitted provided that the following conditions *
15 * are met: *
16 * *
17 * 1. Redistributions of source code must retain the above copyright notice, *
18 * this list of conditions and the following disclaimer. *
19 * *
20 * 2. Redistributions in binary form must reproduce the above copyright *
21 * notice, this list of conditions and the following disclaimer in the *
22 * documentation and/or other materials provided with the distribution. *
23 * *
24 * 3. Neither the name of the copyright holder nor the names of its *
25 * contributors may be used to endorse or promote products derived from *
26 * this software without specific prior written permission. *
27 * *
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39 * *
40 \*===========================================================================*/
41
42 /*===========================================================================*\
43 * *
44 * $Revision$ *
45 * $Author$ *
46 * $Date$ *
47 * *
48 \*===========================================================================*/
49
50
51
52
53 //=============================================================================
54 //
55 // CLASS QuadricT
56 //
57 //=============================================================================
58
59 #ifndef ACG_QUADRIC_HH
60 #define ACG_QUADRIC_HH
61
62
63 //== INCLUDES =================================================================
64
65
66 #include "../../Math/VectorT.hh"
67
68
69 //== NAMESPACE ================================================================
70
71
72 namespace ACG {
73 namespace Geometry {
74
75
76 //== CLASS DEFINITION =========================================================
77
78
85 template <class Scalar>
86 class ACGDLLEXPORT QuadricT
87 {
88 public:
89
90
92 QuadricT(Scalar _a, Scalar _b, Scalar _c, Scalar _d,
93 Scalar _e, Scalar _f, Scalar _g,
94 Scalar _h, Scalar _i,
95 Scalar _j)
96 : a(_a), b(_b), c(_c), d(_d),
97 e(_e), f(_f), g(_g),
98 h(_h), i(_i),
99 j(_j)
100 {}
101
102
104 QuadricT( Scalar _a=0.0, Scalar _b=0.0, Scalar _c=0.0, Scalar _d=0.0 )
105 : a(_a*_a), b(_a*_b), c(_a*_c), d(_a*_d),
106 e(_b*_b), f(_b*_c), g(_b*_d),
107 h(_c*_c), i(_c*_d),
108 j(_d*_d)
109 {}
110
111
113 void clear() { a = b = c = d = e = f = g = h = i = j = 0.0; }
114
115
117 QuadricT<Scalar>& operator+=( const QuadricT<Scalar>& _q )
118 {
119 a += _q.a; b += _q.b; c += _q.c; d += _q.d;
120 e += _q.e; f += _q.f; g += _q.g;
121 h += _q.h; i += _q.i;
122 j += _q.j;
123 return *this;
124 }
125
126
128 QuadricT<Scalar>& operator*=( Scalar _s)
129 {
130 a *= _s; b *= _s; c *= _s; d *= _s;
131 e *= _s; f *= _s; g *= _s;
132 h *= _s; i *= _s;
133 j *= _s;
134 return *this;
135 }
136
137
139 VectorT<Scalar,4> operator*(const VectorT<Scalar,4>& _v) const
140 {
141 return VectorT<Scalar,4>(_v[0]*a + _v[1]*b + _v[2]*c + _v[3]*d,
142 _v[0]*b + _v[1]*e + _v[2]*f + _v[3]*g,
143 _v[0]*c + _v[1]*f + _v[2]*h + _v[3]*i,
144 _v[0]*d + _v[1]*g + _v[2]*i + _v[3]*j);
145 }
146
147
149 Scalar operator()(const VectorT<Scalar,3> _v) const
150 {
151 Scalar x(_v[0]), y(_v[1]), z(_v[2]);
152 return a*x*x + 2.0*b*x*y + 2.0*c*x*z + 2.0*d*x
153 + e*y*y + 2.0*f*y*z + 2.0*g*y
154 + h*z*z + 2.0*i*z
155 + j;
156 }
157
158
160 Scalar operator()(const VectorT<Scalar,4> _v) const
161 {
162 Scalar x(_v[0]), y(_v[1]), z(_v[2]), w(_v[3]);
163 return a*x*x + 2.0*b*x*y + 2.0*c*x*z + 2.0*d*x*w
164 + e*y*y + 2.0*f*y*z + 2.0*g*y*w
165 + h*z*z + 2.0*i*z*w
166 + j*w*w;
167 }
168
169
170 private:
171
172 Scalar a, b, c, d,
173 e, f, g,
174 h, i,
175 j;
176 };
177
178
180 typedef QuadricT<float> Quadricf;
181
183 typedef QuadricT<double> Quadricd;
184
185
186 //=============================================================================
187 } // namespace Geometry
188 } // namespace ACG
189 //=============================================================================
190 #endif // ACG_QUADRIC_HH defined
191 //=============================================================================
ACG
Namespace providing different geometric functions concerning angles.
Definition: DBSCANT.cc:51
ACG::Geometry::QuadricT::operator*=
QuadricT< Scalar > & operator*=(Scalar _s)
multiply by scalar
Definition: QuadricT.hh:128
ACG::Geometry::QuadricT::QuadricT
QuadricT(Scalar _a=0.0, Scalar _b=0.0, Scalar _c=0.0, Scalar _d=0.0)
constructor from given plane equation: ax+by+cz+d=0
Definition: QuadricT.hh:104
ACG::Geometry::QuadricT::operator()
Scalar operator()(const VectorT< Scalar, 3 > _v) const
evaluate quadric Q at vector v: v*Q*v
Definition: QuadricT.hh:149
ACG::Geometry::QuadricT::operator()
Scalar operator()(const VectorT< Scalar, 4 > _v) const
evaluate quadric Q at vector v: v*Q*v
Definition: QuadricT.hh:160
ACG::Geometry::QuadricT::operator+=
QuadricT< Scalar > & operator+=(const QuadricT< Scalar > &_q)
add quadrics
Definition: QuadricT.hh:117
OpenMesh::VectorT
Definition: Vector11T.hh:83
ACG::Geometry::QuadricT
Definition: QuadricT.hh:86
ACG::Geometry::Quadricf
QuadricT< float > Quadricf
Quadric using floats.
Definition: QuadricT.hh:180
ACG::Geometry::QuadricT::QuadricT
QuadricT(Scalar _a, Scalar _b, Scalar _c, Scalar _d, Scalar _e, Scalar _f, Scalar _g, Scalar _h, Scalar _i, Scalar _j)
construct with upper triangle of symmetrix 4x4 matrix
Definition: QuadricT.hh:92
ACG::Geometry::QuadricT::operator*
VectorT< Scalar, 4 > operator*(const VectorT< Scalar, 4 > &_v) const
multiply 4D vector from right: Q*v
Definition: QuadricT.hh:139
ACG::Geometry::QuadricT::clear
void clear()
set all entries to zero
Definition: QuadricT.hh:113
ACG::Geometry::Quadricd
QuadricT< double > Quadricd
Quadric using double.
Definition: QuadricT.hh:183