Пример #1
0
    public static bool lineIntersect3D(Vector3 linea1, Vector3 linea2, Vector3 lineb1, Vector3 lineb2, ref Vector3 ip, float tol)
    {
        Vector3 da = linea2 - linea1;
        Vector3 db = lineb2 - lineb1;
        Vector3 dc = lineb1 - linea1;

        Vector3 dadbcross = Vector3.Cross(da, db);

        float dotTol = Vector3.Dot(dc, dadbcross);

        //Debug.Log(dotTol);

        float toln = tol * 100;

        if (!NearestPointTest.valueWithinRange(-toln, toln, dotTol))
        {
            return(false);
        }

        float s = Vector3.Dot(Vector3.Cross(dc, db), dadbcross) / dadbcross.sqrMagnitude;

        if (s >= 0.0f && s <= 1.0f)
        {
            Vector3 mp = da * s;
            ip = linea1 + mp;
            return(true);
        }

        return(false);
    }