Konventionen:
array[n] = Array[0-(n-1)]; vectorarray = float[3];
code:
private static testVec(float[] test) { if (test.length != 3) { print("error in vectormath: array in wrong format"); exit(-1); } }
public static void vecAdd(float[] base, float[] added) { testVec(base); testVec(added); loop(3) { base[i] += added[i]; } }
public static void vecSub(float[] base, float[] substracted) { testVec(base); testVec(substracted); loop(3) { base[i] -= substracted[i]; } }
public static void scalarMult(float a, float[] b) { testVec(b); loop(3) { b[i] *= a; } }
public static float dotProduct(float[]a, float[] b) { float out = 0; testVec(a); testVec(b); loop(3) { out += a[i]*b[i]; } out = sqrt(out); return out; }
public static float[3] crossProduct(float[] a, float[] b) { float[3] out; testVec(a): testVec(b); loop(3) { out[i] = a[(i+1)%3]*b[(i+2)%3] - b[(i+1)%3]*a[(i+2)%3]; } return out; }
public static float[] transformCartToSphere(float[] a) { float[3] out; testVec(a); out[0] = dotProduct(a, a); out[1] = arccos(a[2]/out[0]); if (a[0] == 0) out[2] = sgn(y)*(MATH.pi/2); else if(a[0] > 0) out[2] = arctan(a[1]/a[0]); else { if (a[1] >= 0) out[2]= arctan(a[1]/a[0]) + MATH.pi; if (a[1] < 0) out[2]= arctan(a[1]/a[0]) - MATH.pi; } return out; }
public static float[] transformSphereToCart(float[] a) { float[3] out; testVec(a); out[0] = a[0]*sin(a[1])*cos(a[2]); out[1] = a[0]*sin(a[1])*sin(a[2]); out[2] = a[0]*cos(a[1]); return out; }