欢迎大家光临【无师自通-教程网】您的到来是我们的荣幸。本站提供photoshop教程,ps教程,flash教程,cad教程,网页制作教程,excel教程,asp教程,vb教程,3d教程,c语言教程,html教程,coreldraw教程,dreamweaver教程,java教程,3dmax教程 等各种教程为主题的内容和服务,相信您会在这里找到您所需要的东东。无师自通伴您一生-谢谢您的光临!!
网站地图 设为首页
简繁切换 加入收藏
栏目待定 留言本站
您现在的位置: 无师自通-教程网 >> 程序设计 >> Visual C教程 >> VC.NET教程 >> 教程正文

  没有公告

教程: VisualC .NETGDI 编程基础 更多...
教程: VisualC .NETGDI 编程基础



  图形几何变换

  图形变换一般是对图形的几何信息经过几何变换后产生新的图形。常见二维图形的变换有平移、比例、对称、旋转、错切等。图形几何变换最有效的手段是采用矩阵变换,GDI 就有这样的矩阵类Matrix,它为我们提供了许多变换的方法,如Invert(转置)、Multiply(矩阵相乘)、Rotate(旋转)等。例如下面的代码就是Matrix::Rotate一个例子,其结果如图7.11所示。

程序代码:

Graphics graphics( pDC->m_hDC );
Pen pen(Color(255, 0, 0, 255));

Matrix matrix;
matrix.Translate(40, 0); // 先平移
matrix.Rotate(30, MatrixOrderAppend); // 后旋转

graphics.SetTransform(&matrix);
graphics.DrawEllipse(&pen, 0, 0, 100, 50);


  需要说明的是,代码中的MatrixOrderAppend用来指明第二个矩阵(若有)的操作次序是后置的,即matrix1 OP matrix2,OP表示某种操作;若为MatrixOrderPrepend 则表示matrix2 OP matrix1。而SetTransform则指定一个矩阵对点坐标进行变换,新的坐标点(x*,y*)结果可用下列公式来表示:

[x* y* 1] = [x y 1] = [m11x m21y dx m12x m22y dy 1]

式中,dx和dy用来指定x和y方向的平移量,若dx = dy = 0,则:

  (1) 当m21 = m12 = 0,m11 = -1,m22 = 1时,有x*= -x,y*= y,产生与y轴对称的反射图形;

  (2) 当m21 = m12 = 0,m11 = 1,m22 = -1时,有x*= x,y*= -y,产生与x轴对称的反射图形;

  (3) 当m21 = m12 = 0,m11 = m22 = -1时,有x*= -x,y*= -y,产生与原点对称的反射图形;

  (4) 当m21 = m12 = 1,m11 = m22 = 0时,有x*= y,y*= x,产生与直线y = x对称的反射图形;

  (5) 当m21 = m12 = -1,m11 = m22 = 0时,有x*= -y,y*= -x,产生与直线y = -x对称的反射图形;

  (6) 而当m11 = m22 = cosq,m21 = -m12 = sinq 时,则进行旋转变换。

  例如下列代码,其结果如图7.12所示。

程序代码:

Graphics graphics( pDC->m_hDC );
Pen pen(Color::Blue,3);
graphics.DrawLine(&pen, 150,50,200,80);

pen.SetColor(Color::Gray);
Matrix matrix( -1,0,0,1, 150,50); // 使用第一种情况

graphics.SetTransform(&matrix);
graphics.DrawLine(&pen, 0,0,50,30);



  其中,Matrix的构造函数有如下定义:

程序代码:

Matrix( REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy);

  需要说明的是,除了使用Matrix进行图形变换外,Graphics本身提供相应的变换方法,如RotateTransform(旋转变换)、ScaleTransform(比例变换)和TranslateTransform(平移变换)等。


  基本绘图函数

  在前面许多示例中,我们已经用到如DrawLine等基本绘图函数。除此之外,还有许多这样的函数,并且每个绘图函数都有其重载形式,这给我们带来了许多方便。表7.1列出这些基本绘图函数。

  表1 GDI 常用基本绘图函数

绘图函数 功能描述 DrawArc 绘制一条圆弧曲线,范围由起止角大小决定,大小由矩形或长宽值指定 DrawBezier 绘制一条由一系列型值顶点决定的三次Bezier曲线 DrawBeziers 绘制一系列的三次Bezier曲线 DrawClosedCurve 绘制一条封闭的样条曲线 DrawCurve 绘制一条样条曲线 DrawEllipse 绘制一条椭圆轮廓线,大小由矩形或长宽值指定 DrawLine 绘制一条直线 DrawPath 绘制由GraphicsPath定义的路径轮廓线 DrawPie 绘制一条扇形(饼形)轮廓线 DrawPolygon 绘制一个多边形的轮廓线 DrawRectangle 绘制一个矩形 FillEllipse 填充一个椭圆区域 FillPath 填充一个由路径指定的区域 FillPie 填充一个扇形(饼形)区域 FillPolygon 填充一个多边形区域 FillRectangle 填充一个矩形区域 FillRectangles 用同一个画刷填充一系列矩形区域 FillRegion 填充一个区域(Region)的内部
  下面的代码是通过路径用两条样条曲线构造一个复杂的区域,然后填充它,其结果如图7.13所示。

程序代码:
Graphics graphics( pDC->m_hDC );

Pen pen(Color::Blue, 3);
Point point1( 50, 200);
Point point2(100, 150);
Point point3(160, 180);
Point point4(200, 200);
Point point5(230, 150);
Point point6(220, 50);
Point point7(190, 70);
Point point8(130, 220);

Point curvePoints[8] = {point1, point2, point3, point4,
point5, point6, point7, point8};
Point* pcurvePoints = curvePoints;

GraphicsPath path;
path.AddClosedCurve(curvePoints, 8, 0.5);

PathGradientBrush pthGrBrush(&path);
pthGrBrush.SetCenterColor(Color(255, 0, 0, 255));
Color colors[] = {Color(0, 0, 0, 255)};
INT count = 1;
pthGrBrush.SetSurroundColors(colors, &count);

graphics.DrawClosedCurve(&pen, curvePoints, 8, 0.5);
graphics.FillPath(&pthGrBrush, &path);


上一页  [1] [2] 

教程录入:admin    责任编辑:admin 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
     
     
     

    access基础知识
    免责声明!本站资料大部分来自于互联网,其版权归原作者或其他合法者所有.如内容涉及或侵犯了您的权益,请通知本人,我将尽快处理!.欢迎您的光临。
    辽ICP备07003958号
    无师自通,伴你一生-教程网