title: How to rotate, scale, and translate a matrix all at once in C#?
body: <p>Okay, this is something that should be a simple matrix question, but my understanding of matrices is somewhat limited.  Here's the scenario:  I have a 1px by 1px sprite that I want to scale by some amount x and y (different amounts on each side), and then I want to rotate that sprite by some angle, and then I want to be able to precisely position the whole thing (from the top left or the center, makes no difference to me).</p>
  
  <p>So far my code is vaguely close, but it tends to be off by some random amount depending on the angle I pass in.</p>
  
  <p>I would think that this would do it:</p>
  
  <pre><code>        Point center = new Point( 50, 50 );
          float width = 60;
          float height = 100;
          float angle = 0.5;
          Vector3 axis = new Vector3( center.X, center.Y, 0 );
          axis.Normalize();
          Matrix m = Matrix.Scaling( width, height, 0 ) *
              Matrix.RotationAxis( axis, angle ) *
              Matrix.Translation( center.X, center.Y, 0 );
  </code></pre>
  
  <p>But it tends to shrink the scale of the rotated line way down, even though I think it's positioning it sort of right.</p>
  
  <p>I've also tried this:</p>
  
  <pre><code>  Matrix m = Matrix.Transformation2D( new Vector2( center.X, center.Y ), 0f,
        new Vector2( width, height ), new Vector2( center.X, center.Y ),
        angle, Vector2.Zero );
  </code></pre>
  
  <p>The line looks exactly right, with the exact right size and shape, but I can't position it correctly at all.  If I use the translation vector at the end of the call above, or if I set a position using Sprite.Draw, neither works right.</p>
  
  <p>This is all in SlimDX. What am I doing wrong?</p>