Nano Hash - криптовалюты, майнинг, программирование

Евклидово расстояние между координатами в массиве

Я вычисляю евклидово расстояние в C #.

Point[] points = new Point[100];

У меня есть координаты точек, которые я создал в этом массиве. Я хочу вычислить расстояние между всеми точками.

for (int i = 1; i < k+1; i++)
 {

     X1 = points[i].X;
     X2 = points[i + 1].X;
     Y1 = points[i].Y;
     Y2 = points[i + 1].Y;
     result = Math.Sqrt((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2));

}

С помощью этого кода я вычислил расстояние между точками (например: расстояние между точками a и b, расстояние между точками c и d и т. Д.), Но я не смог вычислить расстояние между точками a и c или точками b и b I хотите вычислить расстояние между всеми точками в этом массиве. Как мне это сделать?


  • Ваш код должен делать две вещи: 1) выбирать две точки для расчета расстояния между ними; 2) Рассчитайте расстояние между этими точками. Похоже, проблема действительно в части 1, а не в части 2. Один из способов прояснить это - разделить расчет расстояния на метод, например double CalculateDistance(Point p1, Point p2). Затем вы можете сосредоточиться на том, чтобы определить, какие точки сравнивать. (Подсказка: вам, вероятно, понадобится два цикла. Я также рекомендую использовать счетчик на основе 0, поскольку именно так массивы и т. Д. Работают естественным образом в C #.) 09.12.2018
  • Как визуально соединить 2 круга? 09.12.2018

Ответы:


1

Приходится использовать 2 петли. Первый цикл присваивает значения X1, а второй цикл присваивает значения X2.

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

09.12.2018

2

Для этого вам нужно использовать 2 цикла for.

Также вы хотели бы сохранить где-нибудь евклидовы расстояния между этими точками.

09.12.2018

3

Вероятно, вы захотите дважды просмотреть массив.

Point[] points = new Point[100];
for(int i = 0; i < points.Length; i++)
    for (int j = points.Length - 1; j >= i; j--)
    {
        float distance = 0;
        if(i != j)
            distance = CalculateDistance(points[i], points[j]);
        // Do more stuff here
    }

Очевидно, вы можете просто запустить два цикла for одинаковой длины, но это даст вам дважды один и тот же результат. Когда i и j имеют одинаковое значение перевернутого (i = 10, j = 15 и более поздние i = 15 и j = 10), вы выполняете тот же расчет, чтобы получить тот же результат. Чтобы этого не произошло, мой второй цикл выполняет только половину значений, чтобы не повторять вычисления.

Метод CalculateDistance работает точно так же, как и код, который вы написали ранее, в моем случае это следующее:

private static float CalculateDistance(Point point1, Point point2)
{
    float X1 = point1.X;
    float X2 = point1.Y;
    float Y1 = point2.X;
    float Y2 = point2.Y;
    return (float)Math.Sqrt((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2));
}

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

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

09.12.2018

4
public void Euclidea()
        {
            double result;
            int X1,X2,Y1,Y2;

            for (int i = 1; i < k+1; i++)
            {
                X1 = points[i].X;
                Y1 = points[i].Y;
                for (int j = 0; j < k; j++)
                {
                    X2 = points[j + 1].X;
                    Y2 = points[j + 1].Y;
                    result = Math.Sqrt((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2));
                }
            }
        }

Я решил проблему, набрав этот код k = points.length ()

09.12.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..