坐标及其转换

    在调用Drawrectangle和FillRectangle时,要提供指定矩形左上角位置的坐标和指定矩形宽度和高度的边长。默认情况下,边长以像素为单位。坐标指定了在一个二维坐标系统中的位置,这一坐标系统的原点位于窗体的左上角,x轴指向右边,y轴指向下边。如果默认的坐标系统或度量单位并不适合需要,可以通过在程序中添加几条简单的语句对其进行自定义,以满足需求。
    传递给Graphics方法的坐标是全局坐标(world coordinate)。从全局坐标的屏幕显示要经过两次坐标转换。首先将全局坐标转换为页面坐标(page coordinate),页面坐标表示的是逻辑绘图表面上的位置。然后再将页面坐标转换为设备坐标(device coordinate),设备坐标表示的是屏幕上的物理位置。
    注意:全局坐标转换为页面坐标可以通过两种方法实现,
 第一种方法:用可以实现所期望转换的数值来初始化Matrix的实例,并将它赋给Transform属性。(线性代数学的不吊的话,就别用这方法)
 第二种方法:通过使用TranslateTransform和RotateTransform等Graphics方法来定义坐标转换。TranslateTransform通过在x和y的方向上添加具体的量值来移动或平移坐标系统的原点。RotateTransform可以使x和y轴旋转。联合使用这两Graphics方法,就可以将原点放置在任何位置并且可以以任何角度定向x和y轴。

     再举个例子说明一下吧:

using  System;
using  System.Windows.Forms;
using  System.Drawing;
using  System.Drawing.Drawing2D;

class  MyForm: Form
{
    MyForm()
    {
        
// 窗体的标题
        Text  =   " Graph's Position translate " ;
    }
    
protected   override   void  OnPaint(PaintEventArgs e)
    {
        
// 未经平移或旋转的矩形
        SolidBrush brush1  =   new  SolidBrush(Color.Blue);
        e.Graphics.FillRectangle(brush1, 
0 0 200 100 );
        brush1.Dispose();

        
// 矩形向右向下个移动了100个单位
        SolidBrush brush2  =   new  SolidBrush(Color.Black);
        e.Graphics.TranslateTransform(
100.0f 100.0f );
        e.Graphics.FillRectangle(brush2, 
0 0 200 100 );
        brush2.Dispose();

        
// 矩形向右向下个移动了100个单位,并使用RotateTransform将x和y轴各沿逆时针方向旋转15度
        SolidBrush brush3  =   new  SolidBrush(Color.Red);
        e.Graphics.TranslateTransform(
100.0f 100.0f );
        e.Graphics.RotateTransform(
- 15.0f );
        e.Graphics.FillRectangle(brush3, 
0 30 200 100 );
        brush3.Dispose();
    }

    
static   void  Main( string  []args)
    {
        Application.Run(
new  MyForm());
    }
}


    运行的结果如下图:

    除了TranslateTransform和RotateTransform这两个定位坐标系统和旋转坐标轴的有力工具,另外还有一个名为ScaleTransform的相关方法,它可以缩放坐标系统。
    在使用转换的时候,必须牢记一点: 应用不同方法的顺序会影响输出结果。可以这样想象: 在一间屋子里,向前走几步然后转个小弯,与先转弯再开始走,最会停在不同的地方。同样的道理可以应用于矩阵转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值