2012-04-27 64 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