Skip to content

Instantly share code, notes, and snippets.

@gabonator
Created July 3, 2012 12:09
Show Gist options
  • Save gabonator/3039362 to your computer and use it in GitHub Desktop.
Save gabonator/3039362 to your computer and use it in GitHub Desktop.
Two lines intersection
LIB_INLINE BOOL32 CMath::MathRayIntersect ( POINT A1, POINT A2, POINT B1, POINT B2, POINT *lpResult )
{
INT dx1 = A2.x - A1.x;
INT dy1 = A2.y - A1.y;
INT dx2 = B2.x - B1.x;
INT dy2 = B2.y - B1.y;
DOUBLE q = (dx1 * dy2) - (dy1 * dx2);
if (abs(q) < 0.0001) q = 0.0001;
DOUBLE r = ((A1.y - B1.y) * dx2 - (A1.x - B1.x) * dy2) / q;
lpResult->x = (INT) ( A1.x + r * dx1 );
lpResult->y = (INT) ( A1.y + r * dy1 );
dx1 = B2.x - B1.x;
dy1 = B2.y - B1.y;
dx2 = A2.x - A1.x;
dy2 = A2.y - A1.y;
q = (dx1 * dy2) - (dy1 * dx2);
if (abs(q) < 0.0001) q = 0.0001;
DOUBLE s = ((B1.y - A1.y) * dx2 - (B1.x - A1.x) * dy2) / q;
return (r > 0 && r < 1 && s > 0 && s < 1);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment