Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
axes
Range.cxx
Go to the documentation of this file.
1
12
#ifdef _MSC_VER
13
// Include max() and min() missing from MicroSoft Visual C++.
14
#include "msdevstudio/MSconfig.h"
15
#endif
16
17
#include "
Range.h
"
18
19
#include <algorithm>
20
21
#include <cassert>
22
#include <cmath>
23
#include <ostream>
24
25
#ifndef _MSC_VER
26
using
std::floor;
27
#endif
28
29
using
std::ostream;
30
using
std::max;
31
using
std::min;
32
using
std::vector;
33
34
using namespace
hippodraw;
35
36
Range::Range
( )
37
: m_min( 0.0 ),
38
m_max( 0.0 ),
39
m_pos( DBL_MAX ),
40
m_empty( true )
41
{
42
}
43
44
Range::Range
(
double
x,
double
y,
double
p )
45
{
46
47
// x and y are being passed as 'nan' in some cases, leading to failure
48
// of assertion below. I dont know why they are being passed as nan and
49
// from where.
50
51
if
( x > y ) {
52
m_min
= 0;
53
m_max
= 0;
54
m_pos
= DBL_MAX;
55
m_empty
=
true
;
56
}
57
else
{
58
m_min
= x;
59
m_max
= y;
60
m_pos
= p;
61
m_empty
=
false
;
62
}
63
64
// This assertion is failing.
65
//assert ( m_min <= m_max );
66
67
//This is a dirty fix:
68
if
( ! (
m_min
<=
m_max
) ){
69
m_min
= 0;
70
m_max
= 0.1;
71
m_pos
= DBL_MAX;
72
m_empty
=
true
;
73
}
74
75
assert (
m_min
<=
m_max
);
76
77
}
78
79
Range::
80
Range
(
const
std::vector < double > & array )
81
{
82
setRange
( array.begin(), array.end () );
83
}
84
85
double
86
Range::low
()
const
87
{
88
return
m_min
;
89
}
90
91
void
92
Range::setLow
(
double
x )
93
{
94
m_min
= x;
95
assert (
m_min
<=
m_max
);
96
}
97
98
double
99
Range::high
()
const
100
{
101
return
m_max
;
102
}
103
104
void
105
Range::setHigh
(
double
x )
106
{
107
m_max
= x;
108
assert (
m_min
<=
m_max
);
109
}
110
111
double
112
Range::pos
()
const
113
{
114
return
m_pos
;
115
}
116
117
void
118
Range::setPos
(
double
x)
119
{
120
m_pos
= x;
121
assert (
m_min
<=
m_max
);
122
}
123
124
void
125
Range::setRange
(
double
low,
double
high,
double
pos )
126
{
127
m_min
=
low
;
128
m_max
=
high
;
129
m_pos
=
pos
;
130
assert (
m_min
<=
m_max
);
131
}
132
133
void
134
Range::setLength
(
double
val,
bool
high_hold )
135
{
136
if
( high_hold ){
137
m_min
=
m_max
- val;
138
}
else
{
139
m_max
=
m_min
+ val;
140
}
141
assert (
m_min
<=
m_max
);
142
}
143
144
bool
145
Range::includes
(
double
val )
const
146
{
147
return
val >=
m_min
&& val <=
m_max
;
148
}
149
150
bool
151
Range::
152
excludes
(
double
value )
const
153
{
154
return
value < m_min || value >
m_max
;
155
}
156
157
double
158
Range::
159
fraction
(
double
value )
const
160
{
161
return
( value -
m_min
) / (
m_max
-
m_min
);
162
}
163
164
void
Range::setEmpty
(
bool
yes )
165
{
166
m_empty
= yes;
167
}
168
169
void
Range::setUnion
(
const
Range
& range )
170
{
171
if
(
m_empty
) {
172
m_min
= range.
m_min
;
173
m_max
= range.
m_max
;
174
m_pos
= range.
m_pos
;
175
m_empty
=
false
;
176
}
177
else
{
178
m_min
= min (
m_min
, range.
m_min
);
179
m_max
= max (
m_max
, range.
m_max
);
180
m_pos
= min (
m_pos
, range.
m_pos
);
181
}
182
183
assert (
m_min
<=
m_max
);
184
185
}
186
187
void
Range::setIntersect
(
const
Range
& range )
188
{
189
if
(
m_min
> range.
m_max
||
m_max
< range.
m_min
)
return
;
190
m_min
= max (
m_min
, range.
m_min
);
191
m_max
= min (
m_max
, range.
m_max
);
192
m_pos
= max (
m_pos
, range.
m_min
);
193
194
assert (
m_min
<=
m_max
);
195
}
196
197
int
198
Range::numberOfBins
(
double
width )
const
199
{
200
assert (
m_max
>
m_min
);
201
double
number = (
m_max
-
m_min
) / width;
202
203
#ifdef _MSC_VER
204
return
static_cast <
int
> ( number+0.5 );
205
#else
206
return
static_cast <
int
> ( rint( number ) );
207
#endif
208
}
Generated for HippoDraw Class Library by