Массив очков - PullRequest
       14

Массив очков

0 голосов
/ 09 сентября 2011

У меня есть программа, которая находит координаты между двумя точками с заданным интервалом:

    ArrayList<Point> genPoints(double smallDist, Point a, Point b)
    {
        ArrayList<Point> outputPoints = new ArrayList<Point>();
        double distAB = dist2Points(a, b);

        if (smallDist > distAB)
            return null;

        int numGeneratedPoints = (int)(distAB / smallDist);

        Vector vectorBA = b - a;
        vectorBA.Normalize();
        Point currPoint = a;
        for (int i = 0; i < numGeneratedPoints; i++)
        {
            currPoint = currPoint + vectorBA * smallDist;
            if (dist2Points(currPoint, b) != 0)
                outputPoints.Add(currPoint);
        }

        return outputPoints;
    }

Теперь я вызвал этот метод, используя следующий код, где я передаю две точки P1, P2 и предварительно определенное расстояние.

gp = genPoints(1, p1, p2) 

когда я хочу показать значения, это дает мне следующее:

4.94974746830583,4.94974746830583
 5.65685424949238,5.65685424949238
 6.36396103067893,6.36396103067893
 7.07106781186548,7.07106781186548
 7.77817459305202,7.77817459305202

for (int i = 0; i < gp.Count; i++)
    System.Console.WriteLine(" " + gp[i]);

Я не знаю, как получить доступ к этим значениям индивидуально. Я даже не мог использовать gp [i] .x или gp [i] .y. но каким-то образом мне нужно получить доступ к этим значениям отдельно.

Любая помощь будет принята с благодарностью.

1 Ответ

4 голосов
/ 09 сентября 2011

Проблема в том, что вы используете неуниверсальную коллекцию, ArrayList. Индексатор только что возвращает object, поэтому вы должны привести:

Point p = (Point) gp[i];
// Now you can use p.x etc

Если вы используете .NET 2 или выше, было бы лучше использовать универсальную коллекцию, такую ​​как List<T> - сделайте так, чтобы ваш метод возвращал List<Point>, и вы сможете написать:

Point p = gp[i];

... приведение не требуется.

У дженериков есть ряд преимуществ - если вы не вынуждены использовать неуниверсальные коллекции (например, вы пишете код для .NET 1.1), вы должны избегать их и всегда используйте общие коллекции.

Кроме того, методы обычно начинаются с заглавной буквы в .NET, поэтому я бы назвал этот метод GeneratePoints.

...