304{
305 double dM0, dM1, dX, dY, dZ;
307 int swapped=0;
308 int ret=0;
309
310 POSTGIS_DEBUGF(3, "m0: %g m1: %g", m0, m1);
311
312
313 if ( p1->
m == p2->
m )
314 {
315
316 if ( p1->
m < m0 || p1->
m > m1 )
317 return 0;
318
319
320 return 1;
321 }
322
323
324
325
327 {
328 tmp=p2;
329 p2=p1;
330 p1=tmp;
331 swapped=1;
332 }
333
334
335
336
337
338 if ( p2->
m < m0 || p1->
m > m1 )
339 return 0;
340
341
342
343
344
345 if ( p1->
m >= m0 && p2->
m <= m1 )
346 return 1;
347
348
349
350
351
352
353
354
355
356
357
358 dM0=(m0-p1->
m)/(p2->
m-p1->
m);
359 dM1=(m1-p2->
m)/(p2->
m-p1->
m);
363
364 POSTGIS_DEBUGF(3, "dM0:%g dM1:%g", dM0, dM1);
365 POSTGIS_DEBUGF(3, "dX:%g dY:%g dZ:%g", dX, dY, dZ);
366 POSTGIS_DEBUGF(3, "swapped: %d", swapped);
367
368
369
370
371
373 {
374
375
376
377
378 if (m0 == m1 && p2->
m <= m1)
379 {
380 memcpy(p1, p2,
sizeof(
POINT4D));
381
382 POSTGIS_DEBUG(3, "Projected p1 on range (as copy of p2)");
383 }
384 else
385 {
386
391
392 POSTGIS_DEBUG(3, "Projected p1 on range");
393 }
394
395 if ( swapped ) ret |= 0x0100;
396 else ret |= 0x0010;
397 }
398
399
400
401
402
404 {
405
406
407
408
409 if (m0 == m1 && p1->
m >= m0)
410 {
411 memcpy(p2, p1,
sizeof(
POINT4D));
412
413 POSTGIS_DEBUG(3, "Projected p2 on range (as copy of p1)");
414 }
415 else
416 {
417
422
423 POSTGIS_DEBUG(3, "Projected p2 on range");
424 }
425
426 if ( swapped ) ret |= 0x0010;
427 else ret |= 0x0100;
428 }
429
430
431 return ret;
432
433}