Refactored to allow more flexible construction and calculation of direction and magnitude.