posInterpCircumferential = function(_centre) {
const centre = Victor.fromObject(_centre)
return function(_current_pos, _target_pos) {
const current = Victor.fromObject(_current_pos)
const target = Victor.fromObject(_target_pos)
const current_relative = current.subtract(centre)
const target_relative = target.subtract(centre)
const angle_delta = target_relative.angle() - current_relative.angle()
let rotation_angle = (angle_delta + Math.PI ) % (2*Math.PI) - Math.PI
rotation_angle += (rotation_angle < - Math.PI ? 2 * Math.PI : 0)
const radius_change = target_relative.length() - current_relative.length()
return function(t) {
const angle = current_relative.angle() + rotation_angle * t
const radius = current_relative.length() + radius_change * t
const pos = centre.add(Victor(radius,0).rotate(angle))
return pos.toObject()
}
}
}