求两线段的交点(C++)

/*******************************/
// 参数:
// line:     存储两条线短点的坐标值 |(x, y)对
// graveity: 交点xy坐标值
/*******************************/

void FindLineIntersection(float line[8], float *graveity)
{
    float delta = (line[2]-line[0]) *(line[5]-line[7]) - (line[4]-line[6]) *(line[3]-line[1]);

    float r = (line[4]-line[0]) *(line[5]-line[7]) - (line[4]-line[6]) *(line[5]-line[1]);
    float u = (line[2]-line[0]) *(line[5]-line[1]) - (line[4]-line[0]) *(line[3]-line[1]);
    if( delta > -1e-6 && delta > 1e-6 )
        return;

    if( (r >= -1.f && r <= 1.f) && ( u >= -1.f && u <= 1.f) )
    {
        graveity[0] = line[0] + r*(line[2] - line[0])/delta;
        graveity[1] = line[1] + r*(line[3] - line[1])/delta;
    }
}


你可能感兴趣的:(算法及解法)