Как рассчитать точки на верхней половине круга - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь разместить несколько значков одинаково в верхней половине круга.

Мне удалось разместить их вокруг всего круга с помощью следующей формулы / кода

for(int i=0;i<numberOfItems;i++)
{
    float x = (float)(center.X + radius * Math.Cos(2 * Math.PI * i / numberOfItems))-iconBmp.Width/2;
    float y = (float)(center.Y + radius * Math.Sin(2 * Math.PI * i/ numberOfItems))-iconBmp.Height/2;

    canvas.DrawBitmap(iconBmp, new SKPoint(x, y));
}

Но я не могу понять, как это сделать только для верхней половины круга?Есть ли формула для этого?У меня такое ощущение, что тот, который у меня есть для всего круга, просто нуждается в некоторой корректировке для достижения этого ... но не могу понять, что.

Спасибо вам уже!

1 Ответ

2 голосов
/ 06 июня 2019

Это скорее вопрос математики, чем вопрос программирования.

2pi радиана = 360 градусов

Итак, если вы хотите, чтобы все элементы отображались, но фигура была полукругом, используйте:

Math.PI * i / numberOfItems вместо 2 * Math.PI * i / numberOfItems

Кроме того, потому что координаты экрана начинаются в верхнем левом углу. Это сделает нижнюю половину круга первым элементом справа. Если вы хотите верхнюю половину круга с первым элементом слева, просто добавьте пи:

Math.PI + (Math.PI * i / numberOfItems)

Весь код:

for(int i=0;i<numberOfItems;i++)
{
    float x = (float)(center.X + radius * Math.Cos(Math.PI + (Math.PI * i / numberOfItems)))-iconBmp.Width/2;
    float y = (float)(center.Y + radius * Math.Sin(Math.PI + (Math.PI * i / numberOfItems)))-iconBmp.Height/2;

    canvas.DrawBitmap(iconBmp, new SKPoint(x, y));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...