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);
else
return (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 < 90
double 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;
else
quadrant = QUAD_NE;
}
else
{
slope = -_slope;
if (deg >= 90 && deg <= 180)
quadrant = QUAD_NW;
else
quadrant = 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;
else
mpr("Bad ray quadrant!", MSGCH_DIAGNOSTICS);
ray.quadx = tx >= sx ? 1 : -1;
ray.quady = ty >= sy ? 1 : -1;