Condividi tramite


Modifica del comportamento per Vector2.Lerp e Vector4.Lerp

L'implementazione di Vector2.Lerp(Vector2, Vector2, Single) e Vector4.Lerp(Vector4, Vector4, Single) è stata modificata per tenere conto correttamente di un errore di arrotondamento a virgola mobile.

Descrizione delle modifiche

In precedenza, Vector2.Lerp(Vector2, Vector2, Single) e Vector4.Lerp(Vector4, Vector4, Single) erano implementati come value1 + (value2 - value1) * amount. Tuttavia, a causa di un errore di arrotondamento a virgola mobile, questo algoritmo non restituisce sempre value2 quando amount è 1.0f.

In .NET 5 e versioni successive, l'implementazione usa lo stesso algoritmo di Vector3.Lerp(Vector3, Vector3, Single), ovvero (value1 * (1.0f - amount)) + (value2 * amount). Questo algoritmo tiene conto correttamente dell'errore di arrotondamento. Ora, quando amount è 1.0f, il risultato è esattamente value2. L'algoritmo aggiornato consente anche di ottimizzare liberamente l'algoritmo usando MathF.FusedMultiplyAdd quando è disponibile.

Versione di introduzione

5.0

Non è necessaria alcuna azione. Tuttavia, se si vuole mantenere il comportamento precedente, è possibile implementare la propria funzione Lerp che usa l'algoritmo precedente di value1 + (value2 - value1) * amount.

API interessate