Я не знаю, какой язык вы используете, но обычно есть функция atan2, которая дает вам значение из полных 360 градусов.в этом случае вам нужно использовать его дважды, а затем добавить немного дополнительной логики.
некоторый псевдокод поможет разобраться:
initialAngle = atan2(initialPosition.y - origin.y, initialPosition.x - origin.x)
currentAngle = atan2(currentPosition.y - origin.y, currentPosition.x - origin.x)
# angle is measured from x axis anti-clock, so lets find the value starting from
# initial and rotating anti-clock to current, as a positive number
# so we want current to be larger than initial
if (currentAngle < initialAngle) {currentAngle += 2 pi}
# and then we can subtract
return currentAngle - initialAngle
я знаю, что это не использует acos, ноэто многозначное значение, поэтому для этого нужно использовать много логики о признаках различий, которые подвержены ошибкам.atan2 - это то, что вы хотите.