ofLineSegmentIntersection()
is only 2D
/// \brief Determine the intersection between two lines.
/// \param line1Start Starting point for first line.
/// \param line1End End point for first line.
/// \param line2Start Starting point for second line.
/// \param line2End End point for second line.
/// \param intersection glm::vec3 reference in which to store the computed intersection point.
/// \returns True if the lines intersect.
template<class vectype>
bool ofLineSegmentIntersection(const vectype& line1Start, const vectype& line1End, const vectype& line2Start, const vectype& line2End, vectype& intersection){
vectype diffLA, diffLB;
float compareA, compareB;
diffLA = line1End - line1Start;
diffLB = line2End - line2Start;
compareA = diffLA.x*line1Start.y - diffLA.y*line1Start.x;
compareB = diffLB.x*line2Start.y - diffLB.y*line2Start.x;
if (
(
( ( diffLA.x*line2Start.y - diffLA.y*line2Start.x ) < compareA ) ^
( ( diffLA.x*line2End.y - diffLA.y*line2End.x ) < compareA )
)
&&
(
( ( diffLB.x*line1Start.y - diffLB.y*line1Start.x ) < compareB ) ^
( ( diffLB.x*line1End.y - diffLB.y*line1End.x) < compareB )
)
)
{
float lDetDivInv = 1 / ((diffLA.x*diffLB.y) - (diffLA.y*diffLB.x));
intersection.x = -((diffLA.x*compareB) - (compareA*diffLB.x)) * lDetDivInv ;
intersection.y = -((diffLA.y*compareB) - (compareA*diffLB.y)) * lDetDivInv ;
return true;
}
return false;
}