EaseOutRotationController.cs
上传用户:huazai0421
上传日期:2008-05-30
资源大小:405k
文件大小:2k
源码类别:

SilverLight

开发平台:

C#

  1. // Silver.Globe, version 0.11 for Silverlight 1.1 Alpha
  2. // Copyright © Florian Krüsch (xaml-kru.com)
  3. // xaml-kru.com/silverglobe
  4. // This source is subject to the Microsoft Public License (Ms-PL).
  5. // See http://www.microsoft.com/resources/sharedsource/licensingbasics/publiclicense.mspx.
  6. // All other rights reserved.
  7. using System;
  8. using SilverGlobe.Math3D;
  9. namespace SilverGlobe
  10. {
  11.     /// <summary>
  12.     /// EaseOutRotationController controls the globe by easeing out a given rotation.
  13.     /// </summary>
  14.     internal sealed class EaseOutRotationController
  15.     {
  16.         #region Members
  17.         private DateTime _lastTick;
  18.         private Globe _globe;
  19.         private Vector3D _axis;
  20.         private Double _speed;
  21.         #endregion
  22.         #region Constructor
  23.         public EaseOutRotationController(Globe globe)
  24.         {
  25.             _globe = globe;
  26.         }
  27.         #endregion
  28.         #region Methods
  29.         /// <summary>
  30.         /// Start controlling the globe.
  31.         /// </summary>
  32.         public void Init(Vector3D axis, Double initialSpeed)
  33.         {
  34.             _lastTick = DateTime.Now;
  35.             _speed = initialSpeed;
  36.             _axis = axis;
  37.         }
  38.         #endregion
  39.         #region Implementation
  40.         public void Update()
  41.         {            
  42.             DateTime now = DateTime.Now;
  43.             Double dt = (now - _lastTick).TotalSeconds;
  44.             _lastTick = now;
  45.             Double k = 0.2 / dt;
  46.             if (k > 1) k = 1;
  47.             // slow down
  48.             Double ds = _speed * 0.97 - _speed;
  49.             _speed += ds * k;
  50.             _globe.Orientation *= Quaternion.ForRotation(_axis, _speed);
  51.             _globe.Orientation.Normalize();
  52.         }
  53.         #endregion
  54.     }
  55. }