Среднее число двух углов с повторяется [копируют]

Мне нужно было запустить File-> Invalidate Caches / Restart ..., чтобы удалить остатки оригинального пакета

11
задан Community 23 May 2017 в 12:26
поделиться

3 ответа

Попробуйте это (пример на C #):

    static void Main(string[] args)
    {
        Console.WriteLine(GetAngleAverage(0,0));
        Console.WriteLine(GetAngleAverage(269, 271));
        Console.WriteLine(GetAngleAverage(350, 20));
        Console.WriteLine(GetAngleAverage(361, 361));
    }

    static int GetAngleAverage(int a, int b)
    {
        a = a % 360;
        b = b % 360;

        int sum = a + b;
        if (sum > 360 && sum < 540)
        {
            sum = sum % 180;
        }
        return sum / 2;
    }

Думаю, это работает, результат будет

0
270
5
1
1
ответ дан 3 December 2019 в 12:05
поделиться

Просто возьмите нормальное среднее значение и затем возьмите его по модулю 180. В вашем примере это дает 5 градусов, как и ожидалось.

1
ответ дан 3 December 2019 в 12:05
поделиться

если вы посмотрите на угловой круг, вы увидите, что есть 2 противоположных «угла», которые соответствуют вашему «среднему».

Итак, 185 ° и 5 ° равны правильно.

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

Обычно «среднее» значение углов относится к направлению против часовой стрелки. «Среднее» не то же самое, если вы переключите два угла (или если вы используете направление по часовой стрелке).

Например, при a = 20 ° и b = 350 ° , вы ищете угол, который следует за a и перед b в направлении против часовой стрелки , 185 ° - вот ответ. Если вы ищете угол перед a и после b в направлении против часовой стрелки (или после a и до b в против часовой стрелки), 5 ° - это ответ.

Ответ этот пост - правильный путь.

Итак, псевдокод для решения is

if (a+180)mod 360 == b then
  return (a+b)/2 mod 360 and ((a+b)/2 mod 360) + 180 (they are both the solution, so you may choose one depending if you prefer counterclockwise or clockwise direction)
else
  return arctan(  (sin(a)+sin(b)) / (cos(a)+cos(b) )
1
ответ дан 3 December 2019 в 12:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: