C#Windows窗体界面设计_03_坐标系平移 旋转 镜像
来源:互联网 发布:淘宝达人管理中心登陆 编辑:程序博客网 时间:2024/05/16 23:33
binzhouweichao@163.com
2013-10-16
正如前篇所说,Windows窗体默认的坐标系为:左上角为原点,右向为x正向,下方为y正向。
将坐标系转换成常见的平面直角坐标系,即:原点为左下角(或左下方),右侧为x正向,上方为y正向。
用到的坐标系转换方式有:镜像旋转,平移。
首先说一下Drawing库中的坐标系转换方法
参考:http://msdn.microsoft.com/zh-cn/library/System.Drawing.Graphics_methods.aspx
1 平移
TranslateTransform(Single, Single):通过使此 Graphics 的变换矩阵左乘指定的平移来更改坐标系统的原点。
例如:TranslateTransform(a, b),将原点向x方向平移a,向y方向平移b。此处入口参数a和b均为float类型。
重载:TranslateTransform(Single, Single, MatrixOrder):通过以指定顺序将指定平移应用于此 Graphics 的变换矩阵来更改坐标系统的原点。一般用不到此方法。
2 旋转
RotateTransform(Single):将指定旋转应用于此 Graphics 的变换矩阵。
例如:RotateTransform(45),将平面旋转45°。入口参数为角度,(应该是逆时针方向吧),是float类型。
重载:RotateTransform(Single, MatrixOrder):以指定顺序将指定旋转应用到此 Graphics 的变换矩阵。应该也是用不到。
3 缩放(特殊的缩放为镜像)
ScaleTransform(Single, Single):将指定的缩放操作应用于此 Graphics 的变换矩阵,方法是将该对象的变换矩阵左乘该缩放矩阵。
例如:ScaleTransform(a, b),将原平面x缩放a倍,y缩放b倍,入口参数a和b为float类型。
重载:ScaleTransform(Single, Single, MatrixOrder):以指定顺序将指定的缩放操作应用到此 Graphics 的变换矩阵。一般也用不到。。
特殊的缩放:
ScaleTransform(-1, 1):x轴缩放-1倍,y轴缩放1倍。即,原先的x变为-x,y不变,也就是平面关于y轴镜像旋转。
ScaleTransform(1, -1):同上,平面关于x轴镜像旋转。
ScaleTransform(-1, -1):平面关于原点对称旋转。
ScaleTransform(1, 1):平面不变。
通过上述介绍,可以得出,若想要坐标系原点为左下角,上方为y正向,则需要:
原点向下平移至左下角(附近),然后关于x轴镜像旋转。
以上篇02绘图为例,窗体大小为300*300,在去掉上方的标题栏和外围边框后,有大约250左右。则在建立画板后,绘图之前,将画板原点向下(y正向)平移250,再把y缩放-1倍即可。
在TriPaint.cs代码的绘图之前,添加:
//坐标系平移镜像 g.TranslateTransform(0, 250);//向y正向平移300 g.ScaleTransform(1, -1);//关于x轴镜像
绘图完成后,需要释放绘图所占用资源,可以添加代码:
//释放绘图所占用资源 p.Dispose(); g.Dispose();
这样,修改后的TriPaint.cs代码如下:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace TriPaint_20131013{ public partial class TriPaint : Form { public TriPaint() { InitializeComponent(); //在这里添加代码 //对数据进行处理 for (int i = 0; i < GlobalVars.POINTCNT; i++) { GlobalVars.Data[i].X = (int)(i * GlobalVars.xInterval);//i对应的data.X GlobalVars.Data[i].Y = (int)(GlobalVars.times * Math.Sin(GlobalVars.Data[i].X / GlobalVars.times));//sin函数求值 GlobalVars.Data[i].Y = (int)(GlobalVars.Data[i].Y + GlobalVars.times * 1);//Y轴向正向平移1,即1*times,令最高点(也就是3π/2对应的-1点)的值为0 } } private void TriPaint_Load(object sender, EventArgs e) { Graphics g = this.CreateGraphics();//画板 this.Show();//显示 //坐标系平移镜像 g.TranslateTransform(0, 250);//向y正向平移300 g.ScaleTransform(1, -1);//关于x轴镜像 Pen p = new Pen(Color.Blue, 1);//画笔 g.DrawLines(p, GlobalVars.Data);//多点绘图,直线连接 //释放绘图所占用资源 p.Dispose(); g.Dispose(); } }}
前后结果图对比:
参考:http://www.csharpwin.com/csharpspace/9501r5384.shtml
- C#Windows窗体界面设计_03_坐标系平移 旋转 镜像
- C#Windows窗体界面设计_攻击决策项目_03_数据绘图_03_绘制雷点
- C#Windows窗体界面设计_攻击决策项目_02_设计窗体_03_设置窗体弹出退出顺序
- C#Windows窗体界面设计_攻击决策项目_03_数据绘图_01_绘制坐标轴_修订ParamsForm
- C#Windows窗体界面设计_攻击决策项目_03_数据绘图_02_修订坐标轴和ParamsForm文本框数据
- C#Windows窗体界面设计_06_通过调整坐标系来调整数据
- Matlab 图像平移、旋转、缩放、镜像
- C#Windows窗体界面设计_07_多窗体设计
- Python实现图像平移、旋转、水平镜像等
- 直角坐标系的平移和旋转
- 直角坐标系的平移和旋转
- 直角坐标系的平移和旋转
- opengl中关于平移旋转坐标系问题
- 什么叫做坐标系的平移和旋转.
- Windows 窗体的坐标系
- C#Windows窗体界面设计_04_添加PictureBox控件绘图
- C#Windows窗体界面设计_05_添加菜单栏 工具栏 状态栏 按钮
- C#Windows窗体界面设计_攻击决策项目_02_设计窗体_01_主窗体
- Android切换前后置摄像头并录制视频
- Shopex换空间,搬家,迁移的优化详细操作步骤
- 祈祷
- windows 检测80端口
- GCC/GDB学习
- C#Windows窗体界面设计_03_坐标系平移 旋转 镜像
- UVALive 3887 Slim Span(枚举+MST,4级)
- 基于Tcp上传文件
- LVM详细操作说明
- 服务器巡检工具(Xeej)
- 转载的好文章-linux下常用调试技术(carefull)
- NSArray----数组
- NSDictionary------字典
- NSNumber和NSString