refactor Point3D to let it extend from Vector3D