QNDI5MFPHZZXZOJFF2IELF2LIHWVY2HGFRCJWYEFN4WL4ICYZUYQC 3ORZZ66JXYWJUO4W5YP2JRKKZ6ZNMHU7QWAF2QMKH4LFWNNMPM7QC STVGTZVV4C2DWFZTJS5MSXCG7CALIDQXUXQITH2IP3U75LBVLKRQC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC 4FBWCGO5NTT2KBBTYTYVR2AOBI5LHSP7L3TB3ESYF6OFLMEJQESQC 5X6QOOUFVHPEEHOSLZ5RUTNRD5LH4BSGIIFWNEDJJBVJJNM7MBZQC UFMQQPYCBI6Z576P7PH4ZAPC7L7P3D4H66NJMFQKP6WRAPIK2NOQC B5ED3LZM7H6NMC7HBVUWKE4AODTQSKF4EOKZ7KZBZVOCGBZ3XMGQC WY3Q6JZ3HTBF2CYFJOUVG4MMFINBK4PI2DJ625CVKMJ5BPMXAW2AC TQRXKGNUMPIPB4DWAEYEQ33MWWKOMERRAMG4IILPJSJMCHEA5PEQC ACZYEIX7WMPIIODKCATBCUE626AJ4ZGGBOMVC6BGXM27EQU2RECAC AL3SLCDLHEM2K7XFORCHBSO2WRSHWAPRCSMH7HHMRWVBPNA5EM7AC JPITTXY2C43TV7GPYP6MWZJBMRPA6FDB2YVLTTJ2CTW6TZJXMR3AC 2EBEWIV4YHXXAFR4GG2GMZJ2K77NK762HNQ77CZLHI3LDVGX7RJAC ray_def::ray_def(double ax, double ay, double s, quad_type q, int idx): accx(ax), accy(ay), slope(s), quadrant(q), fullray_idx(idx)
ray_def::ray_def(double ax, double ay, double s, int qx, int qy, int idx): accx(ax), accy(ay), slope(s), quadx(qx), quady(qy), fullray_idx(idx)
quad_type bouncequad[4][3] ={// ADV_X ADV_Y ADV_XY{ QUAD_SW, QUAD_NE, QUAD_NW }, // QUAD_SE{ QUAD_SE, QUAD_NW, QUAD_NE }, // QUAD_SW{ QUAD_NE, QUAD_SW, QUAD_SE }, // QUAD_NW{ QUAD_NW, QUAD_SE, QUAD_SW } // QUAD_NE};
quadrant = bouncequad[quadrant][ADV_XY];else if (rc != ADV_XY)quadrant = bouncequad[quadrant][rc];else
{quadx = -quadx;quady = -quady;}else if (rc == ADV_X)quadx = -quadx;else if (rc == ADV_Y)quady = -quady;else // rc == ADV_XY
{if (quadrant == QUAD_SE || quadrant == QUAD_NE)return (0.0);elsereturn (180.0);}double deg = atan(slope) * 180.0 / M_PI; // 0 < deg < 90
return (quady > 0 ? 0.0 : 180.0);
switch (quadrant){case QUAD_SE:return (360.0 - deg);case QUAD_SW:return (180.0 + deg);case QUAD_NW:return (180.0 - deg);case QUAD_NE:default:return (deg);}
// 0 < deg < 90double deg = atan(slope) * 180.0 / M_PI;if (quadx < 0)deg = 180.0 - deg;if (quady < 0)deg = 360.0 - deg;return (deg);
slope = _slope;if (deg >= 180.0 && deg <= 270.0)quadrant = QUAD_SW;elsequadrant = QUAD_NE;}else{slope = -_slope;if (deg >= 90 && deg <= 180)quadrant = QUAD_NW;elsequadrant = QUAD_SE;
quadx = -1;deg = 180 - deg;
if ( tx >= sx && ty >= sy )ray.quadrant = QUAD_SE;else if ( tx < sx && ty >= sy )ray.quadrant = QUAD_SW;else if ( tx < sx && ty < sy )ray.quadrant = QUAD_NW;else if ( tx >= sx && ty < sy )ray.quadrant = QUAD_NE;elsempr("Bad ray quadrant!", MSGCH_DIAGNOSTICS);
ray.quadx = tx >= sx ? 1 : -1;ray.quady = ty >= sy ? 1 : -1;