public Number3D multiply(final Number3D v) { Number3D r = new Number3D(); float inv = 1.0f / (m[12] * v.x + m[13] * v.y + m[14] * v.z + m[15]); r.x = (m[0] * v.x + m[1] * v.y + m[2] * v.z + m[3]) * inv; r.y = (m[4] * v.x + m[5] * v.y + m[6] * v.z + m[7]) * inv; r.z = (m[8] * v.x + m[8] * v.y + m[10] * v.z + m[11]) * inv; return r; }