2014-01-29 7 views
0

Кто-нибудь знает, как добавить значения Point в массив?Добавление массива точек

+1

Не можете ли вы просто использовать массив точек, а затем придать значениям X и Y удвоения, если/когда вам нужно? –

ответ

2

Почему вы хотите, чтобы массив имел тип double? Вы можете просто использовать массив Point;

Point[] points = new Point[2]; 
points[0] = new Point(15,15); 
points[1] = new Point(200,220); 

double someResult = (points[0].x - points[1].x) * (points[0].y - points[1].y); 

Или зацикливать их;

for (int i = 0; i < points.Lenght; i++) 
{ 
     // do something with points[i] 
} 

Или с перечнем;

List<Point> points = new List<Point>(); 
points.Add(new Point(1,1)); //ect 

или

List<Point> points = new { new Point(1,1), new point(2,2) //ect }; 

foreach (Point p in points) 
{ 
    // do something with p 
} 

Некоторые случайные LINQ, что вы могли бы благоприятствовать за петлю;

double xTotal = points.Aggregate((c, n) => c.x + n.y); // gives sum or all x values 
double yTotal = points.Aggregate((c, n) => c.y + n.y); 

Когда я добавляю две точки в массив, означает ли это, что массив будет содержать 4 значения?

Сорт. Массив будет содержать два экземпляра Point. Каждый из них имеет значение x и значение y, но обычно вы можете сказать, что массив имеет 2 значения. Если вы просто хотите удвоить группу 4, вы можете вообще не использовать Point. Вы можете объявить структуру вроде;

public struct Rect 
{ 
    double a; 
    double b; 
    double c; 
    double d; 
} 

и у вас есть 4 двухместных номера, более сгруппированные. Или вы можете использовать Tuple<double, double, double, double>, хотя большинство разработчиков, вероятно, найдут немного странным (эй, мне они нравятся как минимум). Однако это только чтение.

var tuple = new Tuple<double, double, double, double(1, 2, 3, 4); 
+0

@ user3213304 массив содержит два 'Point', каждый из которых имеет' '' '' '' '' '' '' '' '' '' '' [0] .x' 'array [0] .y' и 'array [1] .x' и' array [1] .y'. Вы не сказали бы, что массив имеет «4 значения», потому что он имеет 2 точки, а каждый из них имеет 2 значения.У вас может быть массив любого типа, так что массив имеет 4 значения, потому что точки, каждый из которых имеет два, не имеет смысла. Я мог бы иметь «Файл []» или «string []» или «double []». Количество элементов в массиве не зависит от свойств содержащихся в нем типов. – evanmcdonnal

+0

@ user3213304 также есть примеры циклов. Я не знаю, как вы хотите умножить значения. Если вы просто хотели применить это уравнение, вы должны иметь все элементы в массиве или списке, да, это было бы достаточно легко. Но я не думаю, что это действительно имело бы смысл сделать это, мне нужно больше объяснять, чего вы хотите достичь. – evanmcdonnal

+0

Спасибо, вы все объяснили очень хорошо. – user3213304

0

Я предлагаю вам объявить класс и вот оно:

public class Rectangle 
{ 
    public Rectangle(Point left, Point right) 
    { 
     Left = left; 
     Right = right; 
    } 

    private Point Left{get; set;} 

    private Point Right{get; set;} 

    public double CalculateArea() 
    { 
     return (points[0].x - points[1].x) * (points[0].y - points[1].y); 
    } 

} 

А вот как вы можете использовать его:

var rec = new Rectangle(new Point(15,15), new Point(200,220)); 
var someResult = rec.CalculateArea(); 
0

В общем, вы бы лучше рефакторинга ваша программа использует массивы Point, поскольку она имеет более смысловое значение.

Но если это правда, прямоугольник (не просто четырехсторонняя формы, где вам нужно четыре очка вместо двух), вы можете сделать это:

public double[] ConvertPointsToArray(Point topLeft, Point bottomRight) 
{ 
    var points = new double[4]; 
    points[0] = topLeft.x; 
    points[1] = topLeft.y; 
    points[2] = bottomRight.x; 
    points[3] = bottomRight.y; 
    return points; 
} 

И тогда вы можете использовать массив, как это :

var points = ConvertPointsToArray(left, right); 
var value = (points[0] - points[2]) * (points[1] - points[3]); 

Но как вы можете видеть, что вы должны знать, как точки кодируются в массиве, и это легко испортить.

Класс прямоугольника с двумя точками был бы более полезным.

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