Unity3D - Расчет положения t-значения на орбите - PullRequest
0 голосов
/ 20 сентября 2018

Я использую сценарий, который я нашел в Интернете, который использует kdTree для вычисления ближайшей точки к объекту на поверхности сетки.

У меня есть следующий код в методе OnDrawGizmos, который позволяет мненарисовать круг, который будет вращаться вокруг поверхности объекта.

x = target.transform.position.x + ((Mathf.Cos(tValue)) * (radius));
z = target.transform.position.z + ((Mathf.Sin(tValue)) * (radius));
Gizmos.color = Color.yellow;
Gizmos.DrawWireSphere(new Vector3(x, y, z), 0.06f);

На объекте, который я вращаю, диапазон "tValue" находится в диапазоне от 0 до 6,3, чтобы сделать полную орбиту.Моя проблема в том, что я пытаюсь вычислить значение tValue в диапазоне 0-6.3 объекта, который находится рядом с центральным объектом.Я использовал мою систему kdTree для вычисления положения вектора 3 на поверхности объекта, и он идеально выровняется.

Я вычисляю радиус, используемый в уравнении выше и ниже с помощью:

Vector3 RadiusDirection = (Vector3.ProjectOnPlane(orbitingSurfaceMeshPos, planet.transform.up) - Vector3.ProjectOnPlane(planet.transform.position, planet.transform.up));
float radius = RadiusDirection.magnitude;

Однако, когда я пытаюсь вычислить t-значение, я получаю совершенно другое значение.Я подумал, что могу просто «перевернуть» «уравнение», и поэтому я делал:

float temp = orbiting.z - planet.transform.position.z;
temp = temp / radius;
calculatedTvalue = (Mathf.Asin(temp));

Что я мог сделать не так?Я проверил свое «уравнение обратного хода» в пустой сцене и новом скрипте, и оно работало нормально, если я просто взял результат вычисления положения на орбите и прямо перевернул его.Однако это не работает в моей игре.

...