using  System;
using  System.Drawing;
using  System.Collections;
using  System.ComponentModel;
using  System.Windows.Forms;
using  System.Data;
using  System.Drawing.Drawing2D;

namespace  局部坐标
... {
    
/**//// <summary>
    
/// Form1 的摘要说明。
    
/// </summary>

    public class Form1 : System.Windows.Forms.Form
    
...{
        
/**//// <summary>
        
/// 必需的设计器变量。
        
/// </summary>

        private System.ComponentModel.Container components = null;

        
public Form1()
        
...{
            
//
            
// Windows 窗体设计器支持所必需的
            
//
            InitializeComponent();

            
//
            
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
            
//
        }


        
/**//// <summary>
        
/// 清理所有正在使用的资源。
        
/// </summary>

        protected override void Dispose( bool disposing )
        
...{
            
if( disposing )
            
...{
                
if (components != null
                
...{
                    components.Dispose();
                }

            }

            
base.Dispose( disposing );
        }


        
Windows Form Designer generated code#region Windows Form Designer generated code
        
/**//// <summary>
        
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
        
/// 此方法的内容。
        
/// </summary>

        private void InitializeComponent()
        
...{
            
// 
            
// Form1
            
// 
            this.AutoScaleBaseSize = new System.Drawing.Size(614);
            
this.ClientSize = new System.Drawing.Size(704454);
            
this.Name = "Form1";
            
this.Text = "Form1";

        }

        
#endregion


        
/**//// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>

        [STAThread]
        
static void Main() 
        
...{
            Application.Run(
new Form1());
        }


        
protected override void OnPaint(PaintEventArgs e)
        
...{
            Graphics g 
= e.Graphics;
            
//把客户区设置为白色
            g.FillRectangle(Brushes.White, this.ClientRectangle);
            
//定义相对于X轴镜像的转换矩阵,使得Y轴朝上
            Matrix mat=new Matrix(100-100);
            g.Transform 
= mat;
            
//将坐标原点移动到屏幕中心
            Rectangle rect= this.ClientRectangle;
            
int  w = rect.Width;
            
int h= rect.Height;
            g.TranslateTransform(w 
/ 2-/ 2);

            
//在全局坐标下绘制椭圆
            g.DrawEllipse(Pens.Red, -100-100200200);
            g.FillRectangle(Brushes.Black, 
100 - 20 + 244);
            g.DrawRectangle(Pens.Blue, 
0 - 2-100 + 244);
            g.DrawRectangle(Pens.Blue, 
-100 - 20 + 244);
            g.DrawRectangle(Pens.Blue, 
0 - 2100 + 244);

            
//创建一个椭圆,然后在局部坐标系中进行几何变换
            GraphicsPath gp=new GraphicsPath();
            gp.AddEllipse(
-100-100200200);
            Matrix mat2
=new Matrix();
            
//平移变换
            mat2.Translate(150150);
            
//旋转变换,缺省时按顺时针方向旋转
            mat2.Rotate(30);
            gp.Transform(mat2);
            g.DrawPath(Pens.Blue, gp);
            PointF[] p
= gp.PathPoints;
            g.FillRectangle(Brushes.Black, p[
0].X - 2, p[0].Y + 244);
            g.DrawRectangle(Pens.Blue, p[
3].X - 2, p[3].Y + 244);
            g.DrawRectangle(Pens.Blue, p[
6].X - 2, p[6].Y + 244);
            g.DrawRectangle(Pens.Blue, p[
9].X - 2, p[9].Y + 244);
            gp.Dispose();
        }

    }

}