BALL
1.4.2
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
include
BALL
MATHS
circle3.h
Go to the documentation of this file.
1
// -*- Mode: C++; tab-width: 2; -*-
2
// vi: set ts=2:
3
//
4
// $Id: circle3.h,v 1.42 2004/07/05 20:57:28 oliver Exp $
5
//
6
7
#ifndef BALL_MATHS_CIRCLE3_H
8
#define BALL_MATHS_CIRCLE3_H
9
10
#ifndef BALL_COMMON_EXCEPTION_H
11
# include <
BALL/COMMON/exception.h
>
12
#endif
13
14
#ifndef BALL_MATHS_VECTOR3_H
15
# include <
BALL/MATHS/vector3.h
>
16
#endif
17
18
19
namespace
BALL
20
{
26
template
<
typename
T>
27
class
TCircle3
;
28
33
34
template
<
typename
T>
35
std::istream&
operator >>
(std::istream& s,
TCircle3<T>
& circle);
36
38
template
<
typename
T>
39
std::ostream& operator << (std::ostream& s, const TCircle3<T>& circle);
41
44
template
<
typename
T>
45
class
TCircle3
46
{
47
public
:
48
49
BALL_CREATE
(
TCircle3<T>
)
50
51
54
59
TCircle3
()
60
:
p
(),
61
n
(),
62
radius
(0)
63
{
64
}
65
70
TCircle3
(
const
TCircle3
& circle)
71
:
p
(circle.
p
),
72
n
(circle.
n
),
73
radius
(circle.
radius
)
74
{
75
}
76
83
TCircle3
(
const
TVector3<T>
& point,
const
TVector3<T>
& normal,
const
T&
radius
)
84
:
p
(point),
85
n
(normal),
86
radius(radius)
87
{
88
}
89
94
virtual
~TCircle3
()
95
{
96
}
97
101
virtual
void
clear
()
102
{
103
p
.clear();
104
n
.clear();
105
radius
= (T)0;
106
}
107
109
112
116
void
swap
(
TCircle3
& circle)
117
{
118
TVector3<T>
temp_vector(
p
);
119
p
= circle.
p
;
120
circle.
p
= temp_vector;
121
122
temp_vector =
n
;
123
n
= circle.
n
;
124
circle.
n
= temp_vector;
125
126
T temp =
radius
;
127
radius
= circle.
radius
;
128
circle.
radius
= temp;
129
}
130
134
void
set
(
const
TCircle3
& circle)
135
{
136
p
= circle.p;
137
n
= circle.n;
138
radius
= circle.radius;
139
}
140
146
void
set
(
const
TVector3<T>
& point,
const
TVector3<T>
& normal,
const
T& rad)
147
{
148
p
= point;
149
n
= normal;
150
radius
= rad;
151
}
152
157
TCircle3
&
operator =
(
const
TCircle3
& circle)
158
{
159
p
= circle.
p
;
160
n
= circle.
n
;
161
radius
= circle.
radius
;
162
163
return
*
this
;
164
}
165
170
void
get
(
TCircle3
& circle)
const
171
{
172
circle.p =
p
;
173
circle.n =
n
;
174
circle.radius =
radius
;
175
}
176
182
void
get
(
TVector3<T>
& point,
TVector3<T>
& normal, T& rhs)
const
183
184
{
185
point =
p
;
186
normal =
n
;
187
rhs =
radius
;
188
}
189
191
194
198
bool
operator ==
(
const
TCircle3
& circle)
const
199
{
200
return
(
p
== circle.
p
&&
n
== circle.
n
&&
Maths::isEqual
(
radius
, circle.
radius
));
201
}
202
206
bool
operator !=
(
const
TCircle3
& circle)
const
207
{
208
return
(
p
!= circle.
p
||
n
!= circle.
n
||
Maths::isNotEqual
(
radius
, circle.
radius
));
209
}
210
217
bool
has
(
const
TVector3<T>
& point,
bool
on_surface =
false
)
const
218
{
219
if
(on_surface)
220
{
221
return
(
Maths::isZero
(
n
* (point -
p
))
222
&&
Maths::isEqual
(
p
.getDistance(point),
radius
));
223
}
224
else
225
{
226
return
(
Maths::isZero
(
n
* (point -
p
))
227
&&
Maths::isLessOrEqual
(
p
.getDistance(point),
radius
));
228
}
229
}
230
232
235
240
bool
isValid
()
const
241
{
242
return
true
;
243
}
244
251
void
dump
(std::ostream& s = std::cout,
Size
depth = 0)
const
252
{
253
BALL_DUMP_STREAM_PREFIX
(s);
254
255
BALL_DUMP_HEADER
(s,
this
,
this
);
256
257
BALL_DUMP_DEPTH
(s, depth);
258
s <<
" position: "
<<
p
<< std::endl;
259
260
BALL_DUMP_DEPTH
(s, depth);
261
s <<
" normal: "
<<
n
<< std::endl;
262
263
BALL_DUMP_DEPTH
(s, depth);
264
s <<
" radius: "
<<
radius
<< std::endl;
265
266
BALL_DUMP_STREAM_SUFFIX
(s);
267
}
268
270
273
277
TVector3<T>
p
;
278
282
TVector3<T>
n
;
283
287
T
radius
;
288
290
};
292
294
#ifdef BALL_COMPILER_MSVC
295
template
class
BALL_EXPORT
TCircle3<float>
;
296
#endif
297
301
typedef
TCircle3<float>
Circle3
;
302
306
template
<
typename
T>
307
std::istream&
operator >>
(std::istream& s,
TCircle3<T>
& circle)
308
{
309
char
c
;
310
s >>
c
;
311
s >> circle.
p
>> circle.
n
>> circle.
radius
;
312
s >>
c
;
313
return
s;
314
}
315
323
template
<
typename
T>
324
std::ostream& operator << (std::ostream& s, const TCircle3<T>& circle)
325
{
326
return
s <<
'('
<< circle.p
327
<<
' '
<< circle.n
328
<<
' '
<< circle.radius
329
<<
')'
;
330
}
331
332
}
// namespace BALL
333
334
#endif // BALL_MATHS_CIRCLE3_H
Generated by
1.8.3.1