comparison Framework/Toolbox/GeometryToolbox.cpp @ 151:c5044bbfc303 wasm

CoordinateSystem3D::IntersectSegment()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 01 Feb 2018 17:37:03 +0100
parents 62670cc2bb50
children 441cfe8e7440
comparison
equal deleted inserted replaced
150:62670cc2bb50 151:c5044bbfc303
443 r(2,0) = 0; 443 r(2,0) = 0;
444 r(2,1) = 0; 444 r(2,1) = 0;
445 r(2,2) = 1; 445 r(2,2) = 1;
446 return r; 446 return r;
447 } 447 }
448
449
450 bool IntersectPlaneAndSegment(Vector& p,
451 const Vector& normal,
452 double d,
453 const Vector& edgeFrom,
454 const Vector& edgeTo)
455 {
456 // http://geomalgorithms.com/a05-_intersect-1.html#Line-Plane-Intersection
457
458 // Check for parallel line and plane
459 Vector direction = edgeTo - edgeFrom;
460 double denominator = boost::numeric::ublas::inner_prod(direction, normal);
461
462 if (fabs(denominator) < 100.0 * std::numeric_limits<double>::epsilon())
463 {
464 return false;
465 }
466 else
467 {
468 // Compute intersection
469 double t = -(normal[0] * edgeFrom[0] +
470 normal[1] * edgeFrom[1] +
471 normal[2] * edgeFrom[2] + d) / denominator;
472
473 if (t >= 0 && t <= 1)
474 {
475 // The intersection lies inside edge segment
476 p = edgeFrom + t * direction;
477 return true;
478 }
479 else
480 {
481 return false;
482 }
483 }
484 }
448 } 485 }
449 } 486 }