130 {
131
135
136 const float tol = 5.0;
137
139
142
144
147
148 float z0_min = z1min*
A - max_b2*
B;
149 float z0_max = z1max*
A - min_b2*
B;
150
151 if(z0_max < min_z0-tol || z0_min > max_z0+tol) return false;
152
153 return true;
154 }
155
157
161
162 if(r2max <= r1) return false;
163
164 if(r2min <= r1) {
166 }
167
168 float z0_max = 0.0;
169 float z0_min = 0.0;
170
171 if(z2 > 0) {
172 z0_max = (z1max*r2max - z2*
r1)/(r2max-r1);
173 z0_min = (z1min*r2min - z2*
r1)/(r2min-r1);
174 }
175 else {
176 z0_max = (z1max*r2min - z2*
r1)/(r2min-r1);
177 z0_min = (z1min*r2max - z2*
r1)/(r2max-r1);
178 }
179
180 if(z0_max < min_z0-tol || z0_min > max_z0+tol) return false;
181 return true;
182 }
183
185
192
193 if (r1min >= r2max) return false;
194
195 if (z2 > 0) {
196
197 float z0_max = z1 - r1min*(z2-z1)/(r2max-r1min);
198
199 if(z0_max < min_z0-tol) return false;
200
201 if (r2min > r1max) {
202
203 float z0_min = z1 - r1max*(z2-z1)/(r2min-r1max);
204
205 if (z0_min > max_z0+tol) return false;
206 }
207 }
208 else {
209 float z0_min = z1 - r1min*(z2-z1)/(r2max-r1min);
210
211 if(z0_min > max_z0+tol) return false;
212
213 if (r2min > r1max) {
214
215 float z0_max = z1 - r1max*(z2-z1)/(r2min-r1max);
216
217 if (z0_max < min_z0-tol) return false;
218 }
219 }
220 return true;
221 }
222
224
228
232
233 if (r2 < r1min) return false;
234
235
236
237 float z0_min = z1 - (z2max - z1)/(r2/r1max - 1);
238 float z0_max = z1 - (z2max - z1)/(r2/r1min - 1);
239
240 if (z0_min > z0_max)
std::swap(z0_min, z0_max);
241
242 bool beyond_range = (z0_max < min_z0-tol || z0_min > max_z0+tol);
243
244 if (!beyond_range) return true;
245
246
247
248 z0_min = z1 - (z2min - z1)/(r2/r1max - 1);
249 z0_max = z1 - (z2min - z1)/(r2/r1min - 1);
250
251 if (z0_min > z0_max)
std::swap(z0_min, z0_max);
252
253 beyond_range = (z0_max < min_z0-tol || z0_min > max_z0+tol);
254
255 if (!beyond_range) return true;
256
257 return false;
258
259 }
260
261 return true;
262}