} // ////////////////////////////////////////////////////////////////////////////////////////////////// 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); } // //////////////////////////////////////////////////////////////////////////////////
} // ////////////////////////////////////////////////////////////////////////////////////////// // return /_ AOB static public float rad3(d2p A, d2p O, d2p B) { return(B.rad(O) - A.rad(O)); } // //////////////////////////////////////////////////////////////////////////////////////////
} // ////////////////////////////////////////////////////////////////////////////////////// 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); } // //////////////////////////////////////////////////////////////////////////////////////////////////