zoukankan      html  css  js  c++  java
  • 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>>
  • 相关阅读:
    Android开发实例关键点讲解系列之一:Eclipse中建立Android工程
    类欧几里得小记
    【清华集训2017模拟12.09】塔
    【51nod1792】Jabby's segment tree
    【51nod1220】约数之和
    【51nod 2026】Gcd and Lcm
    【JZOJ5180】【NOI2017模拟6.29】呵呵
    2017noip总结
    2017.11.7总结
    Codeforces Round #395 Div.1 C pacifist【JZOJ5449】Pacifist
  • 原文地址:https://www.cnblogs.com/_Chill/p/1727671.html
Copyright © 2011-2022 走看看