C#Windows窗体界面设计_06_通过调整坐标系来调整数据

本节介绍如何通过调整坐标系而非修改数据本身来放大Windows窗体中的数据视图。在`GlobalVars.cs`中,将数据类型从Point改为PointF,以保留精度。在`TriPaint.cs`中,修改坐标系位置,包括平移、关于x轴的镜像反转,并应用ScaleTransform进行放大。通过调整放大倍数和坐标平移,实现了数据在250x250画布上的合适展示。读者可以尝试改变点数常量`POINTCNT`以观察不同效果。
摘要由CSDN通过智能技术生成

binzhouweichao@163.com

2013-10-19

修改前面的项目。

在之前的项目中,对数据data的处理是通过手动运算的方法,来放大足够的倍数,以取得合适的视图。

本节,对原始数据data不做处理,只是通过调整坐标系scale的方法来放大视图,得到合适的结果。

1. 修改data的声明定义

为了防止数据丢失,对data数据的类型调整为float,即把Point改成PointF。

打开GlobalVars.cs,将原先对data的定义部分注释掉,修改为:

        //类似于#define宏定义,设置三个常量
        public const int POINTCNT = 50;//点数,POINTCNT <= XMAX - XMIN
        //public const int XMAX = 200;//X轴最大值,也就是2π对应的值  
        //public const int XMIN = 0;//X轴最小值
        //public const double times = (XMAX - XMIN) / (2 * Math.PI - 0);//放大倍数
        public const float XMAX = (float)(2 * Math.PI);//不放大情况下的x的最大值
        public const float XMIN = 0F;//不放大情况下x的最小值
        public const float xInterval = (XMAX - XMIN) / (POINTCNT - 1);//i增量对应的data.X增量
        
        //类似于全局变量,可以重新赋值
        /*
        //坐标点变量
        private static Point[] data = new Point[POINTCNT];
        public static Point[] Data
        {
            get { return data; }
            set { data = value; }
        }
         * */
        //使用调整坐标系Scale的方法调整视图,对原始数据运算不做处理
        private static PointF[] data = new PointF[POINTCNT];
        public static PointF[] Data
        {
            get { return data; }
            set { data = value; }
        }

2. sin求值运算的处理

由于是通过坐标系调整的方法,且data坐标类型为float,所以在计算sin函数值时,直接使用原始数据即可。

打开TriPaint.cs,把对data赋值的地方修改成直接运算:

            //对数据进行处理
            /*
            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
            }
             * */
            //直接运算,倍数及平移稍后处理
            for (int i = 0; i < GlobalVars.POINTCNT; i++)
            {
                GlobalVars.Data[i].X = i 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值