矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 3182|回复: 12

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

[复制链接]
     
发表于 2013-10-8 00:18:54 | 显示全部楼层 |阅读模式
学习创作不是学完了在干,干本身就是学

                                                                   ----------牢记伟人教导,实践工作实践一,用画线段的方法画曲线———
                                                                                                                                                      万里江山   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-8 07:34:37 | 显示全部楼层
自己顶一下
回复 支持 反对

使用道具 举报

     
发表于 2013-10-8 12:39:00 | 显示全部楼层
又学习了,看着可像word,哈哈
回复 支持 反对

使用道具 举报

     
发表于 2013-10-8 16:23:20 | 显示全部楼层
lz标题写的好
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2013-10-8 20:25:52 | 显示全部楼层
有想搞数据无线采集的吗?大家一起探讨搞一下
回复 支持 反对

使用道具 举报

     
发表于 2013-10-8 21:14:04 | 显示全部楼层
楼主帖子一定要顶,我都35了,学单片机好几年了,还没入门,连最简单的时钟都做不出来,汗颜
回复 支持 反对

使用道具 举报

     
发表于 2013-10-8 21:37:30 | 显示全部楼层
  我认为楼主很爱学习的精神很好,值得学习,不好意思你在标题及文中有一句话有点使人费解,就是“学习创作不是学完了在干,干本身就是学“一是创作是一般是指文学方面称之创作,而在技术方面我想应称为创造,同时,句中的“在”用法是否有误,我想应为再字或者才字,不知楼主是否认同。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2013-10-8 22:16:30 | 显示全部楼层
本帖最后由 yangcheng84 于 2013-10-8 22:17 编辑
goodman269 发表于 2013-10-8 21:37
我认为楼主很爱学习的精神很好,值得学习,不好意思你在标题及文中有一句话有点使人费解,就是“学习创作 ...


是的. 我承认我打字打成别字了。  “学习创作不是学完了干,干本身就是学”  应该是“学习创不是学完了干,干本身就是学”  现在帖子改不过来了.

赞赏朋友您严谨认真的态度,以后我仔细检查一下行文,再次感谢你.
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2013-10-8 22:21:22 | 显示全部楼层
勿忿 发表于 2013-10-8 21:14
楼主帖子一定要顶,我都35了,学单片机好几年了,还没入门,连最简单的时钟都做不出来,汗颜

不必过于自疚,估计你使用的是汇编语言吧.  关于使用的编程语言,我想没必要再三说明了.

建议你使用C51语言,保证你应用能力大增!当然了,实践出真知,关键在于实践.   


还有,经常分享你学习过程中的成果,可以很好总结你的经验,同时得到更多人的意见和建议.何乐而不为呢?
回复 支持 反对

使用道具 举报

     
发表于 2013-10-8 22:36:50 | 显示全部楼层
yangcheng84 发表于 2013-10-8 22:16
是的. 我承认我打字打成别字了。  “学习创作不是学完了在干,干本身就是学”  应该是“学习创造不是学 ...

没有关系的,有时我也打错字、别字,我很佩服你对学习的态度。
回复 支持 反对

使用道具 举报

     
发表于 2013-10-8 23:37:03 | 显示全部楼层
面向对象的编程呵呵,这一点 俺还未理解,在自己的电子阅读器看E文电子书,有提到过而已,
自己还未体会。
回复 支持 反对

使用道具 举报

     
发表于 2013-10-9 04:10:08 | 显示全部楼层
大部分中国字还是看的懂,就是一些字母跑到一起就看不懂了
回复 支持 反对

使用道具 举报

发表于 2013-10-10 20:21:10 | 显示全部楼层
太厉害了,我门都还没有入。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

蒙公网安备 15040402000005号

GMT+8, 2025-4-30 04:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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