首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 緩動函數實作系列(三):指數緩動 - 極大加速度的視覺衝擊

     編輯:關於.NET

指數緩動特性

指數緩動基於 $P(t) = 2^{10(t-1)}$,特徵是初期極緩慢、後期極度爆發(或反向),給人「極大加速度」的強烈感受。適合模擬火箭發射、彈簧釋放等極端動態。

核心實作碼

// 指數緩動
protected override double GetCurrentValueCore(
    double defaultOriginValue, 
    double defaultDestinationValue, 
    AnimationClock animationClock)
{
    double from = (this.From == null ? defaultDestinationValue : (double)this.From);
    double to = (this.To == null ? defaultOriginValue : (double)this.To);
    double delta = to - from;
    double value = animationClock.CurrentProgress.Value;

    // 加速 (Ease In)
    // return delta * Math.Pow(2, 10 * (value - 1)) + from;

    // 減速 (Ease Out)
    // return delta * (-Math.Pow(2, -10 * value) + 1) + from;

    // 先加速後減速 (Ease InOut)
    double t = value * this.Duration.TimeSpan.Ticks;
    double d = this.Duration.TimeSpan.Ticks;
    if ((t /= (d / 2)) < 1)
    {
        return delta / 2 * Math.Pow(2, 10 * (t - 1)) + from;
    }
    return delta / 2 * (-Math.Pow(2, -10 * --t) + 2) + from;
}

數學原理

  • Ease In:$y = 2^{10(t-1)}$,$t \in [0,1]$ 時從 $2^{-10} \approx 0.001$ 增至 1。
  • Ease Out:$y = 1 - 2^{-10t}$,從 0 增至 $1 - 2^{-10} \approx 0.999$。
  • Ease InOut:前半段壓縮 Ease In,後半段鏡像 Ease Out,於 $t=0.5$ 無縫銜接。

使用建議

  • 同圓弧緩動,繼承 DoubleAnimationBase 並定義依賴屬性。
  • 指數基數 10 可改為參數 Power 暴露給 XAML 調整劇烈程度。
  • 注意數值溢位:`Math.Pow(2, 10*(t-1))` 在 t 接近 0 時極小,接近 1 時為 1,安全範圍內。

結語

指數緩動以極端的非線性曲線創造強烈視覺張力,是動畫設計師工具箱中的「重口味」利器。配合前文的 N 次方、正弦、圓弧緩動,已構建完整的自訂緩動函數庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved