title: C# rotation (transformation) issue
body: <p>I'm trying to create program where will be List of fishes drawn on the canvas.
  (Next step will be changing the place of fishes based on some calculation)
  Each fish is represented by bitmap (png file 7x12 px with picture of fish). <br /><br /></p>
  
  <p>I created Form on which is PictureBox which is my drawing canvas. It has size 640x480 px.<br /><br /></p>
  
  <p>In code below is simplified code I use (I cutted off all not necesary stuff). My problem is with tranformation matrix, at the moment only with rotation.<br /><br /></p>
  
  <p><strong>Problem</strong> is in <strong>class Fish</strong> in <strong>method Draw()</strong> where I'm trying to make a tranformation, at the moment I set the rotation 30 degrees for each fish but later each fish will have different start rotation angle. I want to make a transformation with the where will the fish will be rotated by the rotation angle around its centre. So in this case all fishes should be in one line and rotated each by its rotation angle (here 30 degrees). <br />
  <strong>But they are placed on diagonale</strong>, so the transformation is messed up somehow. 
  How can I fix this? <strong>I'm probably using tansformation incorectly.</strong> </p>
  
  <p>Namespaces using in classes</p>
  
  <pre><code>using System.Drawing;//Graphics, Point
  using System.Drawing.Drawing2D;//Matrix
  </code></pre>
  
  <p>Fish</p>
  
  <pre><code>    class Fish {
        public Point position;
        public int rotation;
        public Graphics g;
        public Image fishImage;
        private Rectangle rect;
        private Matrix matrix;
  
        public Fish(ref Graphics g, int x, int y, int rotation,Image img){
          this.g =  g;
          position = new Point(x,y);
          this.rotation = rotation;
          this.fishImage = img;
          this.rect = new Rectangle(position.X,position.Y, fishImage.Width, fishImage.Height);
  
        }
  
     public void Draw() {
      matrix = new Matrix();
      matrix.Rotate((float)rotation, Matrix.Append); //if i comment this it
      //will be drawn in one line
      //according to the initial values for position
      //if i let the rotation here it will be on diagonale
      //i want it on one line but rotated
      g.Transform = matrix;
  
      rect = new Rectangle(position.X, position.Y, fishImage.Width, fishImage.Height);
      g.DrawImage(fishImage, rect);
     }
  }//end Fish class
  </code></pre>
  
  <p>Form</p>
  
  <pre><code>public partial class Form1 : Form
  {
   private Bitmap canvasBitmap; //bitmap for drawing
   private Graphics g;          
   Image fishImage;
  
   private List&lt;Fish&gt; fishes = new List&lt;Fish&gt;();
    public Form1() {
      InitializeComponent();
     //png image 7x12 pixels 
     fishImage = FishGenetic.Properties.Resources.fishImage; 
     //on Form there is placed PictureBox called canvas
     //so canvas is PictureBox 640x480 px
     canvasBitmap = new Bitmap(canvas.Width, canvas.Height);
     canvas.Image = canvasBitmap;
  
     //prepare graphics
     g = Graphics.FromImage(canvasBitmap);
     g.SmoothingMode = SmoothingMode.AntiAlias;
  
     InitFishes();
     DrawFishes();
     canvas.Invalidate(); //invalidate the canvas 
  
    }//end Form1 constructor     
  
  
   private void InitFishes() {
  
     Fish fish1 = new Fish(ref g, 10, 10, 30, fishImage);
     Fish fish2 = new Fish(ref g, 20, 10, 30, fishImage);
     Fish fish3 = new Fish(ref g, 30, 10, 30, fishImage);
     Fish fish4 = new Fish(ref g, 40, 10, 30, fishImage);
     Fish fish5 = new Fish(ref g, 50, 10, 30, fishImage);
     fishes.Add(fish1);
     fishes.Add(fish2);
     fishes.Add(fish3);
     fishes.Add(fish4);
     fishes.Add(fish5);
   }
  
  private void DrawFishes() {
     foreach(Fish fish in fishes) {
         fish.Draw();
     }
  }
  
  }//end Form1 class
  </code></pre>
  
  <p>Main class</p>
  
  <pre><code>static class Program
      {
          /// &lt;summary&gt;
          /// The main entry point for the application.
          /// &lt;/summary&gt;
          [STAThread]
          static void Main()
          {
              Application.EnableVisualStyles();
              Application.SetCompatibleTextRenderingDefault(false);
              Application.Run(new Form1());
          }
      }
  </code></pre>