Check this out I wrote it on phone and didn't test tell me if it has any bug, basically it will return bitsum value depends on the intersection in each axis and it also return the intersection point.
PHP Code:
#define X_AXIS 0
#define Y_AXIS 1
#define Z_AXIS 2
#define VECTORS_DONT_INTERSECT 0
#define VECTORS_INTERSECT_XY (1<<0)
#define VECTORS_INTERSECT_YZ (1<<1)
#define VECTORS_INTERSECT_ZX (1<<2)
#define VECTORS_INTERSECT_3D (1<<0)|(1<<1)|(1<<2)
new const iaDimensions[ ][ ] = {
{ X_AXIS, Y_AXIS },
{ Y_AXIS, Z_AXIS },
{ Z_AXIS, X_AXIS }
}
DoesVectorsIntersect(const Float:fV1Init[3], const Float:fV1Final[3], const Float:fV2Init[3], const Float:fV2Final[3], Float:tolerance=1.0, Float:fPoint[3])
{
new Float:fFactorV1[3], Float:fFactorV2[3], g_return;
for(new Float:X, Float:YV1, Float:YV2, Float:fDis_xv[2], Float:fDis_yv[2], i; i < 3; i++)
{
fDis_xv[0] = (fV1Final[iaDimensions[i][0]] - fV1Init[iaDimensions[i][0]]);
fDis_xv[1] = (fV2Final[iaDimensions[i][0]] - fV2Init[iaDimensions[i][0]]);
fDis_yv[0] = (fV1Final[iaDimensions[i][1]] - fV1Init[iaDimensions[i][1]]);
fDis_yv[1] = (fV2Final[iaDimensions[i][1]] - fV2Init[iaDimensions[i][1]])
if(fDis_xv[0] != 0.0) fFactorV1[i] = fDis_yv[0] / fDis_xv[0];
if(fDis_xv[1] != 0.0) fFactorV2[i] = fDis_yv[1] / fDis_xv[1];
if( (fDis_yv[0] == 0.0 && fDis_yv[1] == 0.0) || (!fDis_xv[0] && !fDis_xv[1]) || (fFactorV1[i] == fFactorV2[i] && fFactorV1[i] != 0.0) ) continue;
if((fFactorV1[i] == fFactorV2[i] && fFactorV1[i] != 0.0)) X = ((fV1Init[iaDimensions[i][0]] * fFactorV1[i]) - (fV2Init[iaDimensions[i][0]] * fFactorV2[i]) + fV2Init[iaDimensions[i][1]] - fV1Init[iaDimensions[i][1]]) / (fFactorV1[i] - fFactorV2[i]);
else X = fV1Final[iaDimensions[i][0]];
YV1 = (fFactorV1[i] * ( X - fV1Init[iaDimensions[i][0]] ) + fV1Init[iaDimensions[i][1]]);
YV2 = (fFactorV2[i] * ( X - fV2Init[iaDimensions[i][0]] ) + fV2Init[iaDimensions[i][1]]);
if( YV1 == YV2 || ((YV1 - tolerance) <= YV2 <= (YV1 + tolerance)) || ((YV2 - tolerance) <= YV1 <= (YV2 + tolerance)) )
{
fPoint[iaDimensions[i][0]] = X;
switch( i )
{
case 0: g_return |= VECTORS_INTERSECT_XY;
case 1: g_return |= VECTORS_INTERSECT_YZ;
case 2: g_return |= VECTORS_INTERSECT_ZX;
}
}
}
return g_return;
}
__________________