refactor vector3d