矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 3319|回复: 5

原创:学习创作不是学完了在干,干本身就是学-----用已学到知识学习未知的技能

[复制链接]
     
发表于 2013-10-7 20:30:11 | 显示全部楼层 |阅读模式
本帖最后由 yangcheng84 于 2013-10-7 20:40 编辑

学习创作不是学完了在干,干本身就是学

                                                                   ----------牢记伟人教导,实践工作实践一,用画线段的方法画曲线———
                                                                                                                                                      万里江山   2013-09


      当今科技知识迅速膨胀,想搞点有点智能化的电子作品涉及的知识面可真广,这不,近期搞得一个“温湿度数据无线采集器

(待完工,进行中…)”遇到的一个问题就是:如何在电脑上编一个程序,让温度值以曲线的形式画出来?下面分享我学习过程

中的收获,和大家共同学习研究.

首先,将我个人情况自我介绍一下:热衷电子、单片机的爱好者,有一定的C语言基础,电脑上编程是自学的,数学水平一般

般。了解“面向对象的编程”这么一回事 .


开始谈谈我想法的吧:

“如何在电脑上编一个程序,让温度值以曲线的形式画出来”  我选择 VS 2010(C#),因为
它兼容C语言,继承了以前学习锻炼掌握到的C知识,这样搞起来就方便多了.

看看这个C#编译器的样子吧,呵呵:

image001.png


        

C#中的画图控件可能有很多,查阅资料我得知有一类:Draw  ,可以画直线,椭圆,圆…

而我们记录的温湿度就是一个直角坐标平面上的曲线,这个曲线是任意变化的,没啥特别的规律.那么到底该掌握哪些必

须知识就够了呢?
对了,坐标系就是一条条的直线,而曲线嘛…呵呵正式本文的重点. 好了,开始正题.

查阅资料得知:g.DrawLine(), C# 中画图中的画直线方法,g只的作图的“画布”,是自己定义的名字.  只要告诉编译器两个

点A,B的坐标(x0,y1)  ,(x1,y1) 以及画笔的样式,
那么通过DrawLine()方法,例如A(40,5),   B (100,100)

g.DrawLine(myPen, 40, 5, 100, 100);//两点确定一线段

就可以在屏幕上画一条线段了.

image003.png








     private void Form1_Paint(object sender, PaintEventArgs e)
        {
           // bmp();
            Font = new Font("方正姚体", 9);

            Graphics g = this.CreateGraphics(); //建立画布
            Pen myPen = new Pen(Color.Red, 3);//画笔:红色,粗细3号

            g.DrawLine(myPen, 40, 5, 100, 100);//画-线段
        }
}

呵呵,原来C#画线段如此的简单啊!刚才说了,“温湿度就是一个直角坐标平面上的曲线,这个曲线是任意变化的,没啥

特别的规律.”,实际上,C#不提供也不可能提供一种画任意曲线的方法的.那么能否用现有知识学习得到新的技能呢?记得

高中时候,数学老师讲《解析几何》说过,一条曲线,如果我们把它细分,只要你分的的线段足够短,那么这段曲线可以

近似看做就是线段!分的越短,近似程度就越高.  哈哈,又开始用到数学知识了.  为了证明这个方法画曲线的万能性,我

们试着画一个圆验证看看(尽管有画圆的标准方法,但这里作为研究,不采用)


验证题设:  在电脑屏幕某个位置画一个半径为R的圆.如下图.示:

image005.png


分析: 要在屏幕上画曲线转变为画“线段”必须把这个圆周细分为许许多多的小段(点),

比如分成360点,在计算这些点各自的坐标.X,Y.  好了,既然是圆这个东东,我看用极坐标表示比较方便.  设原点的坐标为

(x0,y0),半径为R,则圆上任意一点坐标可表示为:

   X=x0+R*cos (360/N);     //N指点M的和X轴的夹角

   Y= y0+R*sin (360/N);

按照这样算法,我们得到360点的坐标X,Y, 这个繁琐的工作当然不是我们自己算了,让电脑

去算啦. image007.png

好了,把这样的算法翻译成C语言,并且编译试试效果,请看下图!!

呼呼,OK了,和自己最初的想法是一致的.

image009.png



void bmp(int x0, int y0, int R)
        {
            int i;
                  
           int M=360;
           int[] X = new int[M];//取点数量720
           int[] Y = new int[M];//取点数量720
            /*******求圆上任意点M坐标M(X,Y),存入数组X[],Y[]**/
           for (i = 0; i < M; i++)
           {
               X = (int)(x0 + R *Math.Cos(360/M*i));

               Y = (int)(y0 + R * Math.Sin(360 / M*i));

           }
            
            
            /*****************************************************/
            Font = new Font("方正姚体", 9);

            Graphics g = this.CreateGraphics();
            Pen myPen = new Pen(Color.Red, 1);//画笔

            /******************相邻两点线段相连 (坐标值X,Y),最终变成员********************/
            for (i = 0; i < (M-1); i++)
            {
                g.DrawLine(myPen, X, Y, X[i+1], Y[i+1]);//画线段
            }

           


           
        }

/**************************************************************************************/
private void Form1_Paint(object sender, PaintEventArgs e)
        {
            bmp(200,200,100);

        }


/**************************************************************************************/
来来,试试一下画整个坐标系,并在图上画曲线.(次数是正比例函数值,因此是折线)

曲线记录-002.jpg

image013.png
后话:
学习创作不是学完了在干,干本身就是学.

高中毕业10年了,遥想高中当年,我的数学知识一般,我们的数学老师每次给我解答问题时,基本难以直接跟上老师的思

维步调,看得出老师似乎有些不耐烦的表情.好在我一直尊重老师的.自己学不好不能全怪老师. 数学不好,给我解答物理问

题带来了不少麻烦,很多问题不能用刚刚学到的知识去解答,只能用原始的数学算法解答了.物理老师也赞赏我热爱物理

的兴趣,总是不轻易间间接传授我们一些数学知识,并将讲数学在物理中的含义说的很透彻. 国庆节假期(2日),高中老

同学20来人进行了一次隆重的聚会,我因为工作原因没能回去参加, 想想当年一起读高中的同学,现在有的是小老板,更

多的是财务,护理,物流

…非理工类的活儿. 有时我还在想:要是我能参加聚会,在聚会的饭桌上当着老同学和数学老师、物理老师的面,说“遥想

高中当年,我的数学知识一般,但10年后的今天,我依然使用着数学在搞电子、单片机程序”试想,老师同学们是何想法呢

?呵呵。 再次感谢给我们传授知识的老师们!

评分

1

查看全部评分

     
 楼主| 发表于 2013-10-7 20:39:26 | 显示全部楼层
自己先顶一下
回复 支持 反对

使用道具 举报

     
发表于 2013-10-8 12:04:50 | 显示全部楼层
我同意楼主标题的观点,但是内容我看不懂。
回复 支持 反对

使用道具 举报

     
发表于 2013-10-8 21:45:31 来自手机 | 显示全部楼层
当时学C++开始还好,一到“类与对象”就傻眼了
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2013-10-8 22:24:31 | 显示全部楼层
可达 发表于 2013-10-8 21:45
当时学C++开始还好,一到“类与对象”就傻眼了

   我也是半路出家自学的,看过30分钟的视频介绍,马上下载编译器搞起.  并且操作 串口控件.写这些东西目的还是围绕单片机来,至于其他的控件,我决定了解和一般应用即可.

回复 支持 反对

使用道具 举报

     
发表于 2013-10-9 07:16:59 | 显示全部楼层
好样的,要的就是这种精神!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-5-4 11:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表