Поиск ближайших точек не дает правильного ответа - PullRequest
0 голосов
/ 07 мая 2020

Мне нужно найти точки, которые ближе всего друг к другу. Я написал свой код, и он должен работать (я сделал это в java, и он работал нормально, а затем я перевел его в C).

Программа C продолжает выводить неправильный ответ (0,0) (0,0).

Правильный ответ: (1.0, 1.0) (2.0, 0.5)

enter image description here

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double nearest(double x1, double y1, double x2, double y2);

int main(){
    double temp1 = 0;
    double temp2 = 0;
    double temp3 = 0;
    double temp4 = 0;

    double points[8][2] = {
        {-1, 3},
        {-1, -1},
        {1, 1},
        {2, 0.5},
        {2, -1},
        {3, 3},
        {4, 2},
        {4, -0.5}
    };

    double minimum = nearest(points[0][0], points[0][1], points[1][0], points[1][1]);

    for(int i = 0; i < 8; i++){
        for(int j = i+1; j < points[i][j]; j++){
            double distance = nearest(points[i][0], points[i][1], points[j][0], points[j][1]);

            if(minimum > distance){
                minimum = nearest(points[i][0], points[i][1], points[j][0], points[j][1]);

                temp1 = points[i][0];
                temp2 = points[i][1];
                temp3 = points[j][0];
                temp4 = points[j][1];
            }
        }
    }
    printf("(%lf, %lf) (%lf, %lf)\n", temp1, temp2, temp3, temp4);
}

double nearest(double x1, double y1, double x2, double y2){
    return sqrt((pow(x2 - x1, 2)) + (pow(y2 - y1, 2)));
}

1 Ответ

2 голосов
/ 07 мая 2020

Есть две основные проблемы для кода:

  1. Если две первые точки в наборе являются самыми близкими, вы никогда не измените значение для своих temp переменных. Я также предлагаю хранить не значения xy в переменных temp, а индексы (пока) ближайших точек.
  2. Во втором для l oop вы проверяете j < points[i][j], что неверно. Это должно быть j < 8.

Я бы также предложил, чтобы проверка для первого l oop была i < 7, потому что для i = 7 вам не нужно проверять какое-либо расстояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...