2012-04-27 63 views
0

你好Windows Phone绘图椭圆

我想在一个大的椭圆上绘制40个椭圆。真奇怪。

for (int i = 0; i < 40; i++) 
     { 
      { 
       { 
        Random r = new Random(); 
        int distance = r.Next(0, 10000); 
        var rv = r.Next(0, 359); 
        var x = Math.Sin(rv * Math.PI/180) * 225; 
        rv = r.Next(0, 359); 
        var y = Math.Cos(rv * Math.PI/180) * 225; 
        Ellipse e = new Ellipse(); 
        e.Fill = new SolidColorBrush(Color.FromArgb(255, (byte)(counter * 5), (byte)(counter * 3), (byte)(counter * 1))); 
        e.Margin = new Thickness(y, -150 + x, 0, 0); 
        e.Width = 25; 
        e.Height = 25; 
        counter++; 
        PointsGrid.Children.Add(e); 
       } 
      } 
     } 

此代码只绘制7,8或有时9个省略号。但是,如果我添加其他行代码:

for (int i = 0; i < 40; i++) 
     { 
      { 
       { 
        Random r = new Random(); 
        int distance = r.Next(0, 10000); 
        var rv = r.Next(0, 359); 
        var x = Math.Sin(rv * Math.PI/180) * 225; 
        rv = r.Next(0, 359); 
        var y = Math.Cos(rv * Math.PI/180) * 225; 
        Ellipse e = new Ellipse(); 
        e.Fill = new SolidColorBrush(Color.FromArgb(255, (byte)(counter * 5), (byte)(counter * 3), (byte)(counter * 1))); 
        e.Margin = new Thickness(y, -150 + x, 0, 0); 
        e.Width = 25; 
        e.Height = 25; 
        counter++; 
        PointsGrid.Children.Add(e); 
        MessageBox.Show(""); // Additional line 
       } 
      } 
     } 

如果我添加提示消息显示,按OK键上所有的人,我会看到所有40个省略号......

的问题是,怎么会是和我该如何解决它?

+0

您可能需要在添加视图/表单之后刷新/无效。不知道WP7如何。 – 2012-04-27 10:01:37

+0

我想它在现有的省略号上画椭圆,因为随机不是很随意:)输出随机值,你看我的意思 – Reniuz 2012-04-27 10:03:50

回答

4

问题是你使用随机。如果您每次都创建一个新的Random(),它将使用当前时间作为种子。由于当前时间是相同的(由于执行的代码,以便迅速04-0030-03随机数是永远不变的。)

Random r = new Random(); 

for (int i = 0; i < 40; i++) 
     { 
      { 
       { 
        int distance = r.Next(0, 10000); 
        var rv = r.Next(0, 359); 
        var x = Math.Sin(rv * Math.PI/180) * 225; 
        rv = r.Next(0, 359); 
        var y = Math.Cos(rv * Math.PI/180) * 225; 
        Ellipse e = new Ellipse(); 
        e.Fill = new SolidColorBrush(Color.FromArgb(255, (byte)(counter * 5), (byte)(counter * 3), (byte)(counter * 1))); 
        e.Margin = new Thickness(y, -150 + x, 0, 0); 
        e.Width = 25; 
        e.Height = 25; 
        counter++; 
        PointsGrid.Children.Add(e); 
        //MessageBox.Show(""); // Additional line 
       } 
      } 
     } 

消息框只是“放缓”的执行 - 这意味着你的所有圈子AREN”互相顶上。

+0

感谢您的回应,它的工作原理。 – Brzooz 2012-04-27 10:20:56

3

这可能是一个计时问题。你应该在循环外部声明Random,因为种子是基于当前时间的。

Random r = new Random(); 

    for (int i = 0; i < 40; i++) 
    { 
     int distance = r.Next(0, 10000); 
     var rv = r.Next(0, 359); 
     var x = Math.Sin(rv * Math.PI/180) * 225; 
     rv = r.Next(0, 359); 
     var y = Math.Cos(rv * Math.PI/180) * 225; 
     Ellipse e = new Ellipse(); 
     e.Fill = new SolidColorBrush(Color.FromArgb(255, (byte)(counter * 5), (byte)(counter * 3), (byte)(counter * 1))); 
     e.Margin = new Thickness(y, -150 + x, 0, 0); 
     e.Width = 25; 
     e.Height = 25; 
     counter++; 
     PointsGrid.Children.Add(e); 
    } 

如果这确实是你的问题,这意味着你真的画40个椭圆,但其中大部分是重叠的。

+0

同上,非常感谢你:) – Brzooz 2012-04-27 10:20:46