'qlasku' "function v2q(v,t) {\n" +"var q=[];\n" +"q.push(t);\n" +"q.push(v[0]);\n" +"q.push(v[1]);\n" +"q.push(v[2]);\n" +"return q;\n" +"}\n\n" +"function qinv(v,t) {\n" +"var norm=q[0]**2+q[1]**2+q[2]**2+q[3]**2;\n" +"var qi=[];\n" +"qi.push(q[0]/norm);\n" +"qi.push(-q[1]/norm);\n" +"qi.push(-q[2]/norm);\n" +"qi.push(-q[3]/norm);\n" +"return qi;\n" +"}\n\n" +"function qprod(p,q) {\n" +"var r=[];\n" +"r.push(p[0]*q[0]-p[1]*q[1]-p[2]*q[2]-p[3]*q[3]);\n" +"r.push(p[0]*q[1]+p[1]*q[0]+p[2]*q[3]-p[3]*q[2]);\n" +"r.push(p[0]*q[2]-p[1]*q[3]+p[2]*q[0]+p[3]*q[1]);\n" +"r.push(p[0]*q[3]+p[1]*q[2]-p[2]*q[1]+p[3]*q[0]);\n" +"return r;\n" +"}\n\n";