Учитывая следующий алгоритм:же код возвращает разные результаты
public static void Casteljau(Vector3 p1, Vector3 p2, Vector3 p3 , Vector3 p4, ArrayList L)
{
float stepping = (float)(0.02);
for (float x = 0.0f; x <= 1.0f; x += stepping)
{
Vector3 ap1 = Vector3.Lerp(p1, p2, x);
Vector3 ap2 = Vector3.Lerp(p2, p3, x);
Vector3 ap3 = Vector3.Lerp(p3, p4, x);
Vector3 bp1 = Vector3.Lerp(ap1, ap2, x);
Vector3 bp2 = Vector3.Lerp(ap2, ap3, x);
Vector3 p = Vector3.Lerp(bp1, bp2, x);
L.Add(p);
}
}
который получает четыре очка и возвращает список точек, представляющих кривой между ними и той же четыре точкой, переданной этой функцией, я получаю разные результаты в двух разных концах \ клиенты. Одна из расчетных точек имела небольшое отклонение от значения 0.1f
между прогонами (его очень небольшая разница, но критическая для моего использования).
Этот алгоритм используется в многопользовательской игре (с использованием Unity3D), и оба конца работают с этим алгоритмом с точно то же самое четыре очка.
Каждое значение Vector
является поплавок, язык C#
, оба конца работает на том же компьютере (один клиент работает с помощью редактора Unity, еще один является executabe построен из единства), OS в Windows
.
Lerp
функции- http://docs.unity3d.com/ScriptReference/Vector3.Lerp.html
Вы используете UNet? – user3071284