示例#1
0
    } // //////////////////////////////////////////////////////////////////////////////////////////////////

    void getAngle(d2p cam, d2p pnt, float diam, out float min, out float max)
    {
        float dist = cam.dist(pnt);
        float alfa = Mathf.Atan2(diam / 2, dist);
        float beta = Mathf.PI - cam.rad(pnt);

        beta = d2p.normrad(beta);
        min  = Mathf.Min(beta - alfa, beta + alfa);
        max  = Mathf.Max(beta - alfa, beta + alfa);
    } // //////////////////////////////////////////////////////////////////////////////////
示例#2
0
    } // //////////////////////////////////////////////////////////////////////////////////////////

    // return /_ AOB
    static public float rad3(d2p A, d2p O, d2p B)
    {
        return(B.rad(O) - A.rad(O));
    } // //////////////////////////////////////////////////////////////////////////////////////////
示例#3
0
    } // //////////////////////////////////////////////////////////////////////////////////////

    d2p getPCameraHoriz(d2p ptarget, d2p pcue)
    {
        float alfa = -ptarget.rad(pcue);

        if (alfa == 0)
        {
            return(new d2p(-xmax, pcue.z));
        }
        else if (alfa == -Mathf.PI / 2)
        {
            return(new d2p(pcue.x, -zmax));
        }
        else if (alfa > 0 && alfa < Mathf.PI / 2)
        {
            // y = ax + b
            float a        = (ptarget.z - pcue.z) / (ptarget.x - pcue.x); // >0
            float b        = pcue.z - a * pcue.x;
            float z        = b - a * xmax;
            float x        = (-zmax - b) / a;
            d2p   camshort = new d2p(-xmax, z);
            d2p   camlong  = new d2p(x, -zmax);
            if (camshort.dist(pcue) <= camlong.dist(pcue))
            {
                return(camshort);
            }
            return(camlong);
        }
        else if (alfa < 0 && alfa > -Mathf.PI / 2)
        {
            // y = ax + b
            float a        = (ptarget.z - pcue.z) / (ptarget.x - pcue.x); // <0
            float b        = pcue.z - a * pcue.x;
            float z        = b - a * xmax;
            float x        = (zmax - b) / a;
            d2p   camshort = new d2p(-xmax, z);
            d2p   camlong  = new d2p(x, zmax);
            if (camshort.dist(pcue) <= camlong.dist(pcue))
            {
                return(camshort);
            }
            return(camlong);
        }
        else if (alfa > Mathf.PI / 2 && alfa < Mathf.PI)
        {
            // y = ax + b
            float a        = (pcue.z - ptarget.z) / (pcue.x - ptarget.x); // <0
            float b        = pcue.z - a * pcue.x;
            float z        = b + a * xmax;
            float x        = (-zmax - b) / a;
            d2p   camshort = new d2p(xmax, z);
            d2p   camlong  = new d2p(x, -zmax);
            if (camshort.dist(pcue) <= camlong.dist(pcue))
            {
                return(camshort);
            }
            return(camlong);
        }
        else
        {
            Debug.Break();
        }
        return(null);
    } // //////////////////////////////////////////////////////////////////////////////////////////////////