• Silverlight 正弦曲线


        弧度制与角度制是角度测量中的两种特殊制度。我们大概对于角度制最为熟悉,甚至闭着眼都能画出45度或90度的角。圆的360度体系已经成为了一种文化,人们常说“180度转弯”就是指“转到相反的方向”,这里并不是指转弯的方向,而是指一种相反的观点。我们所讨论的角度,对于计算机来说,就是弧度。所以,不管你是否喜欢,都要对弧度制有所了解。

      不论是否喜欢都要使用到它们,而且还需要掌握角度制与弧度制间的相互转换。以下是公式:

         弧度(radians) = 角度(degrees) * Math.PI /180

         角度(degrees) = 弧度(radians) * 180 / Math.PI

       绘制正弦曲线,主要就是计算X坐标与Y坐标,X坐标我们只要累加1就可以,而Y坐标则需要通过(初始坐标+Math.Sin(角度)*范围)计算出来

       那么代码也不多,直接贴上来吧

      

    代码
    double angle = 0;//初始弧度
            double centerY = 200;//初始Y值 Y为0的坐标
            double range = 50;//Y值范围
            double xspeed = 1;
            
    double yspeed = .05;

            
    double xpos;
            
    double ypos;

            PathFigure pf;
            Path path;
            
    public Sin()
            {
                InitializeComponent();

                xpos 
    = 0;

                
    #region 初始化PATH
                path 
    = new Path();
                path.Stroke 
    = new SolidColorBrush(Colors.Blue);
                path.StrokeThickness 
    = 2;

                PathGeometry gm 
    = new PathGeometry();
                path.Data 
    = gm;
                LayoutRoot.Children.Add(path);

                pf 
    = new PathFigure();
                gm.Figures.Add(pf);
                pf.StartPoint 
    = new Point(0, centerY); 
                
    #endregion

                
    //添加刷新事件
                CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
                Application.Current.Host.Settings.MaxFrameRate 
    = 45;
            }

            
    void CompositionTarget_Rendering(object sender, EventArgs e)
            {
                xpos 
    += xspeed; //更新X坐标
                angle += yspeed;//弧度累加
                ypos = centerY + Math.Sin(angle) * range;//更新Y坐标
                LineSegment ls = new LineSegment() { Point = new Point(xpos, ypos) };
                pf.Segments.Add(ls);
    //新增LineSegment

                
    //由于以上代码未能在界面中刷新显示出来,所以目前这么处理
                path.Visibility = Visibility.Collapsed;
                path.Visibility 
    = Visibility.Visible;

                
    if (xpos>500)
                {
                    CompositionTarget.Rendering 
    -= CompositionTarget_Rendering;
                }
            }

       这里有一点问题,我发现在PathFigure里添加了一个LineSegment界面上没有得到刷新,而当改变窗口大小或改变父容器大小等情况path上才显示出新增的Segment

    不过发现频繁的修改canvas的width比较吃cpu,于是就换成了path的隐藏显示来达到效果.

    Get Microsoft Silverlight

     
      参考书籍
       Keith Peters' <<Making_Things_Move>>
  • 相关阅读:
    腰颈椎病康复运动治疗
    丹田呼吸简易教程
    丹田呼吸法
    GNU 汇编语言
    openssl命令简介
    AES128 + cbc + pkcs7 编码C语言实现
    一些linux下的性能监测工具
    git 基本使用教程
    【译】UI设计基础(UI Design Basics)--导航(Navigation)(六)
    【译】UI设计基础(UI Design Basics)--启动与停止(Starting and Stopping)(五)
  • 原文地址:https://www.cnblogs.com/_Chill/p/1727671.html
Copyright © 2020-2023  润新知