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>>
posted @ 2010-05-05 09:12  _Chill  阅读(597)  评论(5编辑  收藏  举报