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