Udostępnij za pośrednictwem


Zmiana działania elementów Vector2.Lerp i Vector4.Lerp

Implementacja i Vector4.Lerp(Vector4, Vector4, Single) zmieniona w celu poprawnego Vector2.Lerp(Vector2, Vector2, Single) uwzględnienia błędu zaokrąglania zmiennoprzecinkowego.

Opis zmiany

Vector2.Lerp(Vector2, Vector2, Single) Wcześniej i Vector4.Lerp(Vector4, Vector4, Single) zostały zaimplementowane jako value1 + (value2 - value1) * amount. Jednak ze względu na błąd zaokrąglania zmiennoprzecinkowego ten algorytm nie zawsze zwraca value2 wartość , gdy amount ma wartość 1.0f.

W programie .NET 5 lub nowszym implementacja używa tego samego algorytmu co Vector3.Lerp(Vector3, Vector3, Single), czyli (value1 * (1.0f - amount)) + (value2 * amount). Ten algorytm poprawnie odpowiada za błąd zaokrąglania. Teraz, gdy amount ma 1.0fwartość , wynik to dokładnie value2. Zaktualizowany algorytm umożliwia również swobodne optymalizowanie algorytmu, MathF.FusedMultiplyAdd gdy jest dostępny.

Wprowadzona wersja

5,0

Nie trzeba podejmować żadnych działań. Jeśli jednak chcesz zachować stare zachowanie, możesz zaimplementować własną Lerp funkcję, która używa poprzedniego algorytmu value1 + (value2 - value1) * amount.

Dotyczy interfejsów API