2016-12-12 7 views
-3

Я хочу нарисовать несколько кругов - которые не пересекаются друг над другом - случайным образом. Для этого я хочу создать объект , который хранит радиус окружности и x и y позицию (они случайны). Затем я хочу, чтобы добавлял эти объекты в массив, чтобы позже рассчитать, пересекает ли круг какой-либо другой круг.Хранить несколько значений + имя в одном объекте

Я знаю, что в p5.js Javascript код выглядит примерно следующим:

var circles = []; 
for (var i = 0; i < 30; i++) { 
    var circle = { 
    x: random(width), 
    y: random(height), 
    r: 32 
    }; 
    circles.push(circle); 
} 

//and now I can draw the circles like following but in a loop: 

ellipse(circles[i].x, circles[i].y, circles[i].r*2, circles[i].r*2); 

Есть ли способ сделать это в C#?

+0

вы можете использовать [Ellipse] (https://msdn.microsoft.com/en-us/library/system.windows.shapes.ellipse (v = vs.110) .aspx) или написать собственный класс. –

+7

Да, есть способы сделать это в C# :) – Auguste

+0

В проекте VS-формы на панели инструментов есть Visual Basic Power Pack с овальной формой, которую можно использовать. Овал имеет размерную ширину и размерную высоту, которые могут быть равны окружности. Таким образом, вы можете иметь список круги = новый Список (); – jdweng

ответ

2

Просто сделать что-то вроде этого:

public class Circle 
    { 
     // In C# this is called a "property" - you can get or set its values 
     public double x { get; set; } 

     public double y { get; set; } 

     public double r { get; set; } 
    } 

    private static List<Circle> InitializeList() 
    { 
     Random random = new Random(); 

     List<Circle> listOfCircles = new List<Circle>(); 

     for (int i = 0; i < 30; i++) 
     { 
      // This is a special syntax that allows you to create an object 
      // and initialize it at the same time 
      // You could also create a custom constructor in Circle to achieve this 
      Circle newCircle = new Circle() 
      { 
       x = random.NextDouble(), 
       y = random.NextDouble(), 
       r = random.NextDouble() 
      }; 

      listOfCircles.Add(newCircle); 
     } 

     return listOfCircles; 
    } 

Логика на самом деле сделать это на экране, будет зависеть от того, что вы делаете Windows Forms, ASP.NET, WPF, или любой другой, но вы сделать что-то вроде:

foreach (Circle circle in InitializeList()) 
{ 
    // This'll vary depending on what your UI is 
    DrawCircleOnScreen(circle); 
} 
1
class Circle { 
    public double Radius { get; set; } 
    public Vector2 Position { get; set; } 
} 

class Vector2 { 
    public double X { get; set; } 
    public double Y { get; set; } 
} 

Читать на классы C#.

Смежные вопросы