refactor, mainly to use Vec2D instead of PVector