#define XYZ_ADD(c,a,b) { (c).x = (a).x + (b).x; (c).y = (a).y + (b).y;\ (c).z = (a).z + (b).z;} #define XYZ_SUB(c,a,b) { (c).x = (a).x - (b).x; (c).y = (a).y - (b).y; \ (c).z = (a).z - (b).z;} #define XYZ_MULT(c,a,b) { (c).x = (a).x * (b).x; (c).y = (a).y * (b).y; \ (c).z = (a).z * (b).z;} #define XYZ_DIV(c,a,b) { (c).x = (a).x / (b).x; (c).y = (a).y / (b).y; \ (c).z = (a).z / (b).z;} #define XYZ_INC(c,a) { (c).x += (a).x; (c).y += (a).y;\ (c).z += (a).z;} #define XYZ_DEC(c,a) { (c).x -= (a).x; (c).y -= (a).y;\ (c).z -= (a).z;} #define XYZ_ADDC(c,a,b) { (c).x = (a).x + (b); (c).y = (a).y + (b);\ (c).z = (a).z + (b);} #define XYZ_SUBC(c,a,b) { (c).x = (a).x - (b); (c).y = (a).y - (b); \ (c).z = (a).z - (b);} #define XYZ_MULTC(c,a,b) { (c).x = (a).x * (b); (c).y = (a).y * (b);\ (c).z = (a).z * (b);} #define XYZ_DIVC(c,a,b) { (c).x = (a).x / (b); (c).y = (a).y / (b);\ (c).z = (a).z / (b);} #define XYZ_COPY(b,a) { (b).x = (a).x; (b).y = (a).y; (b).z = (a).z; } #define XYZ_COPYC(b,a) { (b).x = (a); (b).y = (a); (b).z = (a); } #define DOT_XYZ(p1, p2) ((p1).x * (p2).x + (p1).y * (p2).y + (p1).z * (p2).z) #define CROSS_XYZ(c,a,b) { (c).x = (a).y * (b).z - (a).z * (b).y; \ (c).y = (a).z * (b).x - (a).x * (b).z; \ (c).z = (a).x * (b).y - (a).y * (b).x; } #define CROSS_3(c,a,b) { (c)[0] = (a)[1] * (b)[2] - (a)[2] * (b)[1]; \ (c)[1] = (a)[2] * (b)[0] - (a)[0] * (b)[2]; \ (c)[2] = (a)[0] * (b)[1] - (a)[1] * (b)[0]; } #define NORMALIZE_XYZ(v) { float __tmpnormval; \ __tmpnormval = (double)sqrt((v).x*(v).x + \ (v).y*(v).y + (v).z*(v).z); \ (v).x /= __tmpnormval; \ (v).y /= __tmpnormval; \ (v).z /= __tmpnormval;} #define R_NORMALIZE_XYZ(v) { float __tmpnormval; \ (((__tmpnormval = (double)sqrt((v).x*(v).x + \ (v).y*(v).y + (v).z*(v).z)) \ == 0.0) ? FALSE : ((v).x /= __tmpnormval, \ (v).y /= __tmpnormval, \ (v).z /= __tmpnormval,TRUE));} #define RGB_ADD(c,a,e) { (c).r = (a).r + (e).r; (c).g = (a).g + (e).g; \ (c).b = (a).b + (e).b; } #define RGB_SUB(c,a,e) { (c).r = (a).r - (e).r; (c).g = (a).g - (e).g; \ (c).b = (a).b - (e).b; } #define RGB_MULT(c,a,e) { (c).r = (a).r * (e).r; (c).g = (a).g * (e).g; \ (c).b = (a).b * (e).b; } #define RGB_ADDC(c,a,e) { (c).r = (a).r + (e); (c).g = (a).g + (e); \ (c).b = (a).b + (e); } #define RGB_SUBC(c,a,e) { (c).r = (a).r - (e); (c).g = (a).g - (e); \ (c).b = (a).b - (e); } #define RGB_MULTC(c,a,e) { (c).r = (a).r * (e); (c).g = (a).g * (e); \ (c).b = (a).b * (e); } #define RGB_DIVC(c,a,e) { (c).r = (a).r / (e); (c).g = (a).g / (e); \ (c).b = (a).b / (e); } #define RGB_COPY(c,a) { (c).r = (a).r; (c).g = (a).g; (c).b = (a).b; } #define RGB_COPYC(c,a) { (c).r = (a); (c).g = (a); (c).b = (a); } #undef MIN #undef MAX #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define MAX(a, b) ((a) > (b) ? (a) : (b))