39 const double cos_a = scalpha.
cs, sin_a = scalpha.
sn;
45 int nqwave = (
z < 0.) ? 0 : int(
z /
lwc()->m_QuarterWaveLength);
49 bool begin_qw =
false;
50 if((nqwave % 2) != 0){
61 if(nqwave != 0 && nqwave !=
lwc()->m_NumberOfHalfWaves){
64 if((nqwave % 2) == 0)
x = -
x;
71 const double z_prime =
z * cos_a +
x * sin_a;
72 const double x_prime =
x * cos_a -
z * sin_a;
74 if(z_prime > straight_part){
75 const double dz = straight_part - z_prime;
78 }
else if(z_prime > -straight_part){
81 const double dz = straight_part + z_prime;
86 if(!begin_qw) distance = -distance;
87 if((nqwave % 2) == 0) distance = -distance;
96 const double tan_beta = sin_a/(1.0 + cos_a);
98 if(
z < - local_straight_section &&
99 (
x <
lwc()->m_FanFoldRadius ||
100 x < -
lwc()->m_StraightStartSection *
z / local_straight_section / tan_beta ) )
105 const double z_prime =
z * cos_a +
x * sin_a;
106 const double x_prime =
x * cos_a -
z * sin_a;
107 if (z_prime < local_straight_section) {
108 const double dz = local_straight_section - z_prime;
113 if (z_prime <= straight_part) {
114 distance = - x_prime;
116 const double dz = straight_part - z_prime;
123 if (nqwave == 0) distance = -distance;
127 if(std::abs(dd - distance) > 0.000001){
129 std::cout <<
"DTNF MISMATCH " <<
this <<
" " <<
P <<
" "
130 << dd <<
" vs " << distance << std::endl;
144#ifdef LWC_PARAM_ANGLE
147 double cos_a = scalpha.
cs, sin_a = scalpha.
sn;
154 if(
z >
lwc()->m_QuarterWaveLength){
156 unsigned int nhwave = (
unsigned int)(
z /
lwc()->m_HalfWaveLength + 0.5);
160 if(nhwave == 0) sin_a = - sin_a;
161 double z_prime =
z * cos_a +
x * sin_a;
162 const double x_prime =
z * sin_a -
x * cos_a;
163 if(z_prime > straight_part){
164 const double dz = z_prime - straight_part;
173 z_prime += straight_part;
177 const double &dz = z_prime;
195 const double tan_beta = sin_a/(1.0 + cos_a);
197 if(
z < - local_straight_section &&
198 (
x <
lwc()->m_FanFoldRadius ||
199 x < -
lwc()->m_StraightStartSection *
z / local_straight_section / tan_beta ))
204 const double z_prime =
z * cos_a +
x * sin_a;
205 const double x_prime =
x * cos_a -
z * sin_a;
206 if (z_prime < local_straight_section) {
207 const double dz = local_straight_section - z_prime;
212 const double straight_part =
214 if (z_prime <= straight_part) {
215 return sqw? x_prime: (-x_prime);
217 const double dz = straight_part - z_prime;
233#ifdef LWC_PARAM_ANGLE
236 const double cos_a = scalpha.
cs, sin_a = scalpha.
sn;
243 if(
z < 0.) nqwave = 0;
244 else nqwave = int(
z /
lwc()->m_QuarterWaveLength);
245 bool begin_qw =
false;
246 if((nqwave % 2) != 0){
251 if(nqwave != 0 && nqwave !=
lwc()->m_NumberOfHalfWaves){
253 if((nqwave % 2) == 0)
x = -
x;
258 const double z_prime =
z * cos_a +
x * sin_a;
259 const double x_prime =
x * cos_a -
z * sin_a;
261 const double dz = straight_part - z_prime;
262 if (dz > 0)
result.set(0.,
y, z_prime);
264 double a = std::atan(std::abs(dz / (x_prime +
lwc()->m_FanFoldRadius)));
265 result.set(
lwc()->m_FanFoldRadius * (std::cos(
a) - 1),
y, straight_part +
lwc()->m_FanFoldRadius * std::sin(
a));
267 result.rotateY(std::asin(sin_a));
275 if(nqwave == 0)
x = -
x;
277 const double tan_beta = sin_a/(1.0+cos_a);
279 if(
z < - local_straight_section &&
280 (
x <
lwc()->m_FanFoldRadius ||
281 x < -
lwc()->m_StraightStartSection *
z / local_straight_section / tan_beta))
286 const double z_prime =
z * cos_a +
x * sin_a;
287 const double x_prime =
x * cos_a -
z * sin_a;
288 if(z_prime < local_straight_section) {
289 double a = std::abs(std::atan((local_straight_section - z_prime) / (x_prime -
lwc()->m_FanFoldRadius)));
291 result.set(
lwc()->m_FanFoldRadius * (1 - std::cos(
a)),
y, local_straight_section -
lwc()->m_FanFoldRadius * std::sin(
a));
294 if(z_prime <= straight_part) {
297 double a = std::abs(std::atan((straight_part - z_prime) / (x_prime +
lwc()->m_FanFoldRadius)) );
298 result.set(
lwc()->m_FanFoldRadius * (std::cos(
a) - 1),
y, straight_part +
lwc()->m_FanFoldRadius * std::sin(
a));
301 result.rotateY(std::asin(sin_a));
321#ifdef LWC_PARAM_ANGLE
324 double cos_a = scalpha.
cs, sin_a = scalpha.
sn;
331 if(
z >
lwc()->m_QuarterWaveLength){
333 unsigned int nhwave = (
unsigned int)(
z /
lwc()->m_HalfWaveLength + 0.5);
336 const double straight_part =
339 if(nhwave == 0) sin_a = - sin_a;
340 const double z_prime =
z * cos_a +
x * sin_a;
341 if(z_prime > straight_part){
342 const double x_prime =
x * cos_a -
z * sin_a;
343 const double dz = straight_part - z_prime;
344 double a1 = std::atan(std::abs(dz / (x_prime +
lwc()->m_FanFoldRadius)));
347 result.set(x1*cos_a - z1*sin_a,
y, z1*cos_a + z1*sin_a);
349 }
else if(z_prime > -straight_part){
350 result.set(-z_prime * sin_a,
y, z_prime*cos_a + zshift);
353 const double x_prime =
x * cos_a -
z * sin_a;
354 const double dz = straight_part + z_prime;
355 double a1 = std::atan(std::abs(dz / (x_prime +
lwc()->m_FanFoldRadius)));
358 result.set(x1*cos_a - z1*sin_a,
y, z1*cos_a + z1*sin_a);
370 const double tan_beta = sin_a / (1.0 + cos_a);
372 if(
z < - local_straight_section &&
373 (
x <
lwc()->m_FanFoldRadius ||
374 x < -
lwc()->m_StraightStartSection *
z / local_straight_section / tan_beta))
379 const double z_prime =
z * cos_a +
x * sin_a;
380 const double x_prime =
x * cos_a -
z * sin_a;
381 if(z_prime < local_straight_section) {
382 double a = std::abs(std::atan((local_straight_section - z_prime) / (x_prime -
lwc()->m_FanFoldRadius)));
383 result.set(
lwc()->m_FanFoldRadius * (1 - std::cos(
a)),
y, local_straight_section -
lwc()->m_FanFoldRadius * std::sin(
a));
386 if(z_prime <= straight_part) {
389 double a = std::abs(std::atan((straight_part - z_prime) / (x_prime +
lwc()->m_FanFoldRadius)) );
390 result.set(
lwc()->m_FanFoldRadius * (std::cos(
a) - 1),
y, straight_part +
lwc()->m_FanFoldRadius * std::sin(
a));
393 result.rotateY(std::asin(sin_a));
413#ifdef LWC_PARAM_ANGLE
418 const double cos_a = scalpha.
cs, sin_a = scalpha.
sn;
427 if(
z < 0.) nqwave = 0;
428 else nqwave = int(
z /
lwc()->m_QuarterWaveLength);
429 bool begin_qw =
false;
430 if((nqwave % 2) != 0){
439 if(nqwave != 0 && nqwave !=
lwc()->m_NumberOfHalfWaves){
445 if((nqwave % 2) == 0){
446 if(begin_qw) local_side = -1;
448 if(!begin_qw) local_side = -1;
453 if(dz >= rho * sin_a){
457 + sqrt(rho * rho - dz * dz);
472 const double tan_beta = sin_a/(1.0+cos_a);
473 const double min_local_fold_region = rho1i * tan_beta;
475 if(
z <= - min_local_fold_region){
480 const double max_local_fold_region = rho1 * sin_a - min_local_fold_region;
482 if(
z < max_local_fold_region){
483 z += min_local_fold_region;
484 result = rho1 - sqrt(rho1 * rho1 -
z *
z);
491 if(dz >= rho * sin_a){
495 + sqrt(rho * rho - dz * dz);