Подтвердить что ты не робот

Android. Разделив круг на N равных частей и узнайте координаты каждой точки разделения

У меня есть требование, чтобы круг был разделен на N равных частей на основе числа (2,3... n. Но мне нужны координаты точек деления.

У меня есть круг, чьи centre(x,y) и radius(150) известны.

Вопрос:

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

Изображение круга для refrence:

image

4b9b3361

Ответ 1

Вам нужно convert между полярным и Cartesian. Угол, который вам нужен, - это угол между (воображаемой) вертикальной линией, разделяющей круг пополам и линию, соединяющую центр с границей круга. С помощью этой формулы вы можете рассчитать смещения X и Y из центра.

В вашем примере изображения первый угол равен 0, а второй - 360/n. Каждый следующий i*(360/n), где я - индекс текущей строки, которую нужно рисовать. Применяя это, вы получите смещения X и Y по часовой стрелке (и вы можете просто добавить их в координаты X и Y центра, чтобы найти координаты каждой точки)

EDIT: некоторый псевдокод:

//x0, y0 - center coordinates
for(i = 1 to n)
{
    angle = i * (360/n);
    point.x = x0 + r * cos(angle);
    point.y = y0 + r * sin(angle);
}

Ответ 2

Я уже принял ответ... формула работает отлично. Вот решение, закодированное на Java. Это поможет другим разработчикам.

    private int x[];  // Class variable
    private int y[];  // Class variable

    private void getPoints(int x0,int y0,int r,int noOfDividingPoints)
    {

        double angle = 0;

        x = new int[noOfDividingPoints];
        y = new int[noOfDividingPoints];

        for(int i = 0 ; i < noOfDividingPoints  ;i++)
        {
            angle = i * (360/noOfDividingPoints);

            x[i] = (int) (x0 + r * Math.cos(Math.toRadians(angle)));
            y[i] = (int) (y0 + r * Math.sin(Math.toRadians(angle)));

        }

        for(int i = 0 ; i < noOfDividingPoints  ;i++)
        {
            Log.v("x",""+i+": "+x[i]);
            Log.v("y",""+i+": "+y[i]);

        }
    }

Где x0 и y0 - координаты центра круга. r - радиус.

В моем случае:

Вход x0 = 0, y0 = 0 и r = 150, noOfDividingPoints = 5

вывод

point1: (150,0)

point2: (46,142)

point3: (-121,88)

point4: (-121, -88)

point5: (46, -142)