Как пройти через каждую целую точку в круге с заданным центром (x, y) и радиусом r? - PullRequest
0 голосов
/ 10 апреля 2020

Я попробовал приведенный ниже код с r = 10, и оператор print выполнялся 12 раз вместо ожидаемых 20, поскольку диаметр круга совпадает с центром.

public void testPoints(int x, int y, int r){
    for(int i = 0; i < 360; i++){
        if((int) Math.round(x+r*Math.cos(i)) == x){
            System.out.println("Hi");
        }
    }
}

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Используйте встроенный метод для преобразования в радианы.

public void testPoints(int x, int y, int r){
    for(int i = 0; i < 360; i++){
        if(Math.round(x+r*Math.cos(Math.toRadians(i))) == x){
            System.out.println("Hi");
        }
    }
}

Или просто начните с радиан в вашем l oop

    public static void testPoints(int x, int y, int r){
        double maxAngle = 2*Math.PI;
        double increment = maxAngle/360.;
        for(double i = 0; i < maxAngle; i += increment){
            if(Math.round(x+r*Math.cos(i)) == x){
                System.out.println("Hi");
            }
        }
    }
0 голосов
/ 10 апреля 2020

Здесь вы пропустили то, что функция ожидает угол в радианах, а не в градусах. Чтобы это исправить, просто конвертируйте угол в градусах в радианы. Вы можете достичь этого с помощью этого:

if ((int) Math.round(x+r*Math.cos((i*Math.PI)/180)) == x){
      System.out.println("Hi");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...