Как рассчитать позицию на круге на основе значения прогресса? - PullRequest
1 голос
/ 14 января 2020

В настоящее время я работаю над системой орбит для игры. Я понял, что объект будет двигаться по кругу, основываясь на значении прогресса, которое будет между 0,0 и 1,0 (0,5 - это половина окружности). Я рассчитываю это следующим образом:

float angle = Mathf.Deg2Rad * 360 * t;
float xPos = Mathf.Sin(angle) * xAxis;
float yPos = Mathf.Cos(angle) * yAxis;

return new Vector3(xPos, yPos, 0.0f);

С t просто deltatime, а переменные xAxis / yAxis - радиус круга. Однако сейчас я немного застрял в том, как я мог бы добиться прогресса по кругу на основе осознания. Итак, если у меня есть объект, который попадает в нижнюю часть круга, как я могу рассчитать, что это прогресс 0,5?

1 Ответ

3 голосов
/ 14 января 2020

Первый шаг: узнайте угол вашей заданной позиции с осью Y.

Второй шаг: Рассчитайте долю полного круга (360 градусов), которую имеет ваш угол.

Первый шаг включает в себя немного тригонометрии, и там вы должны убедиться, что получили правильный тип угла на основе того, в каком квадранте вы находитесь. Второй шаг должен быть тривиальным.

Вы можете проверить atan2 функция, доступная во многих языках программирования: https://en.wikipedia.org/wiki/Atan2

Она дает угол между точкой (x, y) и положительной осью x. Итак, в вашем случае, в зависимости от того, где начинается ваш круг, вы бы сместили его на 90 градусов, чтобы получить угол с положительной осью Y. Кроме этого он должен работать нормально, хотя.

...