#include /* C=A+B */ #define ADD2(C,A,B) \ ( C[0] = A[0] + B[0], \ C[1] = A[1] + B[1], \ C[2] = A[2] + B[2], \ C ) /* C=A-B */ #define SUB2(C,A,B) \ ( C[0] = A[0] - B[0], \ C[1] = A[1] - B[1], \ C[2] = A[2] - B[2], \ C ) /* A=B */ #define COPY(A,B) \ ( A[0] = B[0], A[1] = B[1], A[2] = B[2] ) /* C=AxB */ #define CROSS2(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], \ C ) /* n=n/|n| */ #define NORMALIZE(n) \ { \ GLfloat s; \ \ s = sqrt(n[0]*n[0] + n[1]*n[1] + n[2]*n[2]); \ n[0] /= s; \ n[1] /= s; \ n[2] /= s; \ } /* |n| */ #define LENGTH(n) \ sqrt(n[0]*n[0] + n[1]*n[1] + n[2]*n[2]) /* a==b? */ #define EQUAL(a,b) \ (a[0] == b[0] && a[1] == b[1] && a[2] == b[2]) /* print 3vec */ #define PRINT(a) \ printf("%s=[%.2f %.2f %.2f] ", #a, a[0], a[1], a[2])