Среднее арифметическое углов как найти

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    !
    правила раздела Алгоритмы

    1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
    2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
    3. Приводимые фрагменты исходного кода старайтесь выделять тегами code…/code
    4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
    5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии «срочно надо», заданный в 2003 году)
    6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)

    >
    Нахождение среднего угла

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    12.07.07, 11:16

      Помогите пожалуйста … уперся в проблему :wall:

      Задача:
      Есть набор точек расположенных по отношению к центру координат под разными углами.
      Интервал величин 0-360 градусов
      Надо найти среднюю величину угла для данных точек

      Например:
      имеем 3 точки расположеные под углами 359, 1 и 6 градусов соответственно …
      глядя на это очевидно что средний угол будет ((359-360) + 1 + 6)/3 = 2 градуса …

      Но вот как понять что в случае с 359 величину надо отнимать от 360 чтобы получить -1
      а в случае 1 и 6 не надо … ?
      И если предположить что углы до какой-то величины считать отрицательными о после какой-то положительными до тогда до какой?

      Причем надо знать что угол именно 359 а не 181 градус т.е. просто считать среднее по синусам например не получится …

      Спасибо

      П/С:
      Задача в том чтобы в пространстве Хафа линии сгруппировать по минимальному расстоянию и заменить на одну со средними радиусом и углом


      Swindler



      Сообщ.
      #2

      ,
      12.07.07, 11:20

        Цитата maksimz @ 12.07.07, 11:16

        Но вот как понять что в случае с 359 величину надо отнимать от 360 чтобы получить -1

        смотреть что точка попала в 3 или 4 четверть? :unsure: тоесть если угол больше 180, то угол =угол -360


        maksimz



        Сообщ.
        #3

        ,
        12.07.07, 11:38

          помоему получится та же проблема со сменой знака … т.е. 181, 179 и 174 градуса … среднее 178

          а если по четвертям то 181 в 3-ей четверти и значит 181-360=-179 -> (-179+179+174)/3 = 174/3

          Добавлено 12.07.07, 11:40
          я еёе понимаю как минимальное расстояние посчитать между углами но пока это не помогает

          Минимальное расстояние:
          Пусть а1 и а2 углы то минимальное расстояние между ними мр=а1-а2 если мр>180 то мр=360-мр


          MBo



          Сообщ.
          #4

          ,
          12.07.07, 14:19

            сложить единичные векторы, направленные под нужными углами(Cos(fi[i]), Sin(f[i])), и вычислить угол (направление) результирующего вектора.


            AVA12



            Сообщ.
            #5

            ,
            12.07.07, 14:52

              Гм. Если я правильно понял задачу, то решение элементарно:

              Строим векторы одинаковой длины, которые образуют с осью заданные углы. Складываем эти векторы. Сумма векторов как раз и задает «средний» азимут.

              По-моему, так.


              maksimz



              Сообщ.
              #6

              ,
              12.07.07, 15:16

                спасибо
                предпоследнее решение вроде работает :)


                Го_



                Сообщ.
                #7

                ,
                13.07.07, 11:52

                  Junior

                  *

                  Цитата maksimz @ 12.07.07, 15:16

                  предпоследнее решение вроде работает

                  Так получится не средняя величина угла.


                  Pacific



                  Сообщ.
                  #8

                  ,
                  13.07.07, 15:49

                    Senior Member

                    ****

                    Рейтинг (т): 30

                    Го_
                    Ну да: arcsin((sin(30)+sin(45))/2) != (30+45)/2

                    Тогда нужно складывать именно значения углов, а оси проводить так, чтобы все углы попали в интервал (0, pi). Если оси провести так не удастся, значит, не судьба :rolleyes: Хотя… Можно отдельно посчитать средний угол для интервала (0, pi) и средний угол для интервала (pi, 2*pi) и сложить их с соответствующими весовыми коэффициентами. Нужно требовать от автора строгое определение того, что нужно вычислить. Тогда он и сам разберется :yes:

                    Еще один прикол: какой будет средний угол для углов 0 и 180? Он может быть равен 90 (если мы их рассматриваем как 0 и 180), и -90 (если мы их рассматриваем как 0 и -180). Направления прямо противоположные :P

                    Сообщение отредактировано: Pacific — 13.07.07, 16:01


                    maksimz



                    Сообщ.
                    #9

                    ,
                    18.07.07, 13:38

                      На самом деле про «предпоследнее решение которое вроде работает» это о том что оно решает мою проблему … а проблема смотри П/С первого сообщения :)

                      На сколько я его понял надо посчитать сумму синусов и сумму косинусов для углов среднее для которых надо найти и угол которому соответствуют полученые значения и есть искомый т.е. если имеем sum(sin(a)) и sum(cos(a)) то а это искомый угол и лично я решил что могу найти его как:
                      а=arctg(sum(sin(a))/sum(cos(a)))

                      Может я и ошибаюсь но подсчитав по нескольким вариантам получил то что и надо … отсюда и «вроде работает»

                      По поводу 0 и 180 … точки в пространстве Хафа (получаемого после преобразования Хафа на некотором изображении)
                      насколько я понимаю задаются полярными координатами т.е. если имеем 2 точки расположенные к центру под 0 и под 180 это означает что они соответствуют 2м параллельным прямым расположенным по разные стороны от центра и соответственно вопрос о том можно ли их объединить в одну сводится к сумме расстояний между ними и при условии что можно то средний угол я и не нахожу вообще :P

                      а переношу добавляемую точку в тот же квадрант в котором находится точка к которой я её добавляю

                      т.е. да я согласен что проблему не описал полностью … но полного описания как оказалось и не требовалось … :)

                      Сообщение отредактировано: maksimz — 18.07.07, 13:39


                      Velas



                      Сообщ.
                      #10

                      ,
                      30.05.17, 20:53

                        maksimzСтолкнулся с вашей древней задачей о нахождении среднего значения между направлениями.
                        Решение:(Вы уж просите, я геодезист)
                        1. считаем, что направление это это угол (левый угол), отсчитываемый от точки северва по часовой стрелке и изменяющийся от 0 до 359.999(9);
                        2. исходя из 1 считаем, что существует предел в 360 градусов, но направление может быть только 0, однако из-за арифметических действий
                        возникает переполнение.;
                        3. Есть 2 или более направления — веер направлений, кол-во N. Приведём их к общему началу FirsnAl. В результате получим веер направлений в
                        котором любое направление Al[i] находится в пределах 0<=Al < Lim(360). Берём среднее Meam. Окончательный результат — Meam + First.

                        Var
                        BеерDirect : Array(1..N) of real;
                        tmp : Array(1..N) of real;
                        First : Real;
                        Summ : Real;
                        Meam : Real;
                        i : Integer;

                        //много лишнего, но для наглядности
                        //если считаете в радианах используйте масшабиррование и длинные целые.
                        Summ :=0;
                        First := BеерDirec;
                        for i := 1 to N do
                        begin
                        tmp[i] := BeepDirect[i] — First;
                        if tmp[i] <= 360 them
                        tmp[i] + 360;
                        Summ := Summ + tmp[i];
                        end;
                        Meam := Summ/N
                        Result := Meam + First;

                        1напр = 359 -359 = 0
                        2рапр = 001 -359 = 358 +360 = 2 / 2 = 1 + 359 = 0


                        MBo



                        Сообщ.
                        #11

                        ,
                        31.05.17, 03:36

                          Velas
                          Что получится для примера автора 359, 1 и 6 градусов?
                          Или для углов 45, 315, 315?


                          amk
                          Online



                          Сообщ.
                          #12

                          ,
                          31.05.17, 16:02

                            Программа не работает.

                            После исправления ошибок будет работать, если углы лежат в пределах полукруга

                            ExpandedWrap disabled

                                Summ :=0;

                                First := BеерDirect[1];

                                for i := 1 to N do

                                  begin

                                  tmp := BeepDirect[i] — First;

                                  if tmp[i] > 180 then

                                    tmp = tmp — 360;

                                  Summ := Summ + tmp;

                                  end;

                                Result := Summ/N + First;

                            Если направления лежат большим веером то, во-первых, затруднительно вообще определить, что есть среднее направление.
                            Первый вариант, дающий такое же решение для узких секторов, выбрать направление, минимизирующее сумму квадратов отклонений от него заданных углов. Но для некоторых наборов таких минимумов может быть несколько.
                            Другой. для каждого направления взять единичный направляющий вектор и в качестве среднего взять направление их суммы (если она отличается от нуля). Для малых разбросов результат почти совпадает.


                            Velas



                            Сообщ.
                            #13

                            ,
                            31.05.17, 20:29

                              Ну да ‘апечатка’. First — это минимальное направление из веера(в общем случае любое). Отсортируем список
                              (или массив так проще для восприятия информации человеком, но не обязательно) измерений Имеем:359°—-(1)
                              359°—-)1)
                              1°——(4)
                              4°—-(359)
                              вычитаем из всех по 359—(1)
                              0°——(0)
                              2°——(3)
                              5°——(358)
                              ищем среднее
                              (0°+2°+ 5°)/3 = 2°20’00»—{(0+3+358)/3 = 361/3 = (361-360)/3 = 0°20’00»}
                              складываем с 359°—(1)
                              1°20’00»————(1°20’00»)

                              по другому прибавим ко всем направлениям по 1° (дополнение до 0°)



                              ищем среднее
                              (0°+2°+ 5°)/3 = 2°20’00»
                              складываем с 359°
                              1°20’00»

                              направления это не углы т.к.
                              1 угол = 2°
                              2 угол = 3°
                              среднее
                              (2°+ 3°)/2 := 2°30’00»

                              Для
                              Что получится для примера автора 359, 1 и 6 градусов?
                              Или для углов 45, 315, 315?

                              Добавлено 31.05.17, 20:40
                              Разорвал текст, извините бывает.
                              Для MBo
                              Что получится для примера автора 359, 1 и 6 градусов?
                              Или для углов 45, 315, 315?

                              Углы Среднее = (45+315+315)/3 =255
                              направления = {((45-45)+(315-45)+(315-45))/3+45 = (0+270+270)/3+45 = 180/3+45 = 105°


                              Velas



                              Сообщ.
                              #14

                              ,
                              31.05.17, 21:27

                                Схемка показывает, как измеряются направления

                                Прикреплённый файлПрикреплённый файл____________________________________________________l.pdf (51,62 Кбайт, скачиваний: 308)


                                MBo



                                Сообщ.
                                #15

                                ,
                                01.06.17, 04:04

                                  Цитата

                                  Для MBo
                                  Или для углов 45, 315, 315?

                                  Углы Среднее = (45+315+315)/3 =255
                                  направления = {((45-45)+(315-45)+(315-45))/3+45 = (0+270+270)/3+45 = 180/3+45 = 105°

                                  В обоих случаях арифметика подвела, получится и там, и там 225, но это не так важно.

                                  Если ветер день дул на северо-восток, а два дня на северо-запад, то у тебя в среднем получится направление на юго-запад :wacko: :-?

                                  Автор же описал, какие результаты для него (и в большинстве практических применений) адекватны, а в данном случае выходит вовсе не то.

                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                                  0 пользователей:

                                  • Предыдущая тема
                                  • Алгоритмы
                                  • Следующая тема

                                  Рейтинг@Mail.ru

                                  [ Script execution time: 0,0374 ]   [ 17 queries used ]   [ Generated: 24.05.23, 19:14 GMT ]  

                                  6.1.
                                  Измерение углов с помощью универсального
                                  угломера.

                                  Порядок выполнения
                                  измерений:

                                  1) установить
                                  измеряемое изделие между угольником и
                                  линейкой угломера

                                  (измерение угла
                                  1(А));

                                  2) вращением
                                  подвижной линейки добиться отсутствия
                                  просвета между

                                  угольником,
                                  линейкой и сторонами измеряемого угла;

                                  1. снять
                                    1-й отсчет и занести в табл.6.1;

                                  2. аналогично
                                    выполнить измерение углов 2(Б), 3(С), 4(D);

                                  3. повторить
                                    пункты 1-4. Снять 2-й отсчет углов 1(А)-4(D).
                                    Данные измерений занести в
                                    табл. 6.1;

                                  4. определить
                                    среднее арифметическое значение углов
                                    1(А)-4(D);

                                  определить
                                  сумму 1(А)-4(D)
                                  и определить погрешность измерения.

                                  (6.1.)

                                  Таблица
                                  6.1.

                                  Результаты
                                  измерения углов

                                  Обозначение
                                  угла на образце

                                  Универсальный

                                  угломер

                                  Оптический

                                  угломер

                                  Номер отсчета

                                  Среднее значение

                                  Номер отсчета

                                  Среднее значение

                                  1-й

                                  2-й

                                  1-й

                                  2-й

                                  1(А)

                                  2(Б)

                                  3(С)

                                  4(D)

                                  Сумма

                                  Σαiср

                                  Σαiср

                                  6.2.
                                  Измерение углов с помощью оптического
                                  угломера

                                  Порядок выполнения измерений:

                                  1. установить измеряемое
                                    изделие между подвижной и неподвижной
                                    линейками угломера (измерение угла
                                    1(А):

                                  2. вращением подвижной
                                    линейки добиться отсутствия просвета
                                    между угольником, линейкой и сторонами
                                    измеряемого угла;

                                  3. снять 1-й отсчет и
                                    занести в табл. 6.1;

                                  4. аналогично выполнить
                                    измерение углов 2(Б), 3(С), 4(D);

                                  5. повторить пункты
                                    1-4. Снять 2-й отсчет углов 1(А)-4(D).
                                    Данные измерений занести в табл. 6.1.;

                                  6. определить среднее
                                    арифметическое значение углов 1(А)-4(D);

                                  7. определить сумму
                                    углов 1(А)-4(D) и определить
                                    погрешность измерения по формуле 6.1.

                                    1. Измерение углов
                                      на инструментальном микроскопе.

                                  Порядок выполнения измерений.

                                  1. установить измеряемое
                                    изделие на стекло предметного стола
                                    микроскопа рис.5.6.

                                  (измерение
                                  угла 1(А)); настроить микроскоп на резкость.

                                  1. Вращая микровинты
                                    продольного и поперечного перемещений
                                    рис. 5.6 совместить перекрестие штриховой
                                    окулярной головки с вершиной измеряемого
                                    угла;

                                  2. совместить линию
                                    штриховой шкалы окулярной головки с
                                    одной из сторон угла с помощью кримальеры.
                                    расположенной слева от окулярной
                                    головки;

                                  4) снять
                                  показания первого отсчета угла

                                  по
                                  угловой шкале и занести его значение
                                  в табл.6.2;

                                  1. совместить туже
                                    линию штриховой шкалы окулярной головки
                                    с другой стороной угла с помощью
                                    кримальеры, расположенной слева от
                                    окулярной головки;

                                  6) снять
                                  показания второго отсчета угла

                                  по
                                  угловой шкале и занести его значение
                                  в табл.6.2;

                                  7)
                                  определить значение первого угла как
                                  разность между первым и вторым отсчетом
                                  по формуле

                                  ;

                                  1. выполнить пункты
                                    2-8 для углов 2(Б)-4(D).
                                    Полученные данные занести в табл.6.2;

                                  Таблица
                                  6.2.

                                  Результаты измерения углов на
                                  инструментальном микроскопе

                                  Обозначение

                                  Угла на об-

                                  разце

                                  Номер замера

                                  Среднее

                                  значение

                                  угла

                                  1-й

                                  2-й

                                  1(А)

                                  2(Б)

                                  3(С)

                                  4(D)

                                  Сумма


                                  αiср

                                  1. выполнить второй
                                    раз пункты 2-8 для углов 1(А)-4(D)
                                    (второй замер). Полученные данные занести
                                    в табл.6.2;

                                  2. определить средние
                                    арифметические значение углов
                                    0.5(Δa1+Δa2);

                                  3. вычислить сумму
                                    средних значений углов и определить
                                    погрешность измерений по формуле 6.1.

                                  6.4. Измерение
                                  параметров конуса на инструментальном
                                  микроскопе.

                                  Порядок выполнения измерений.

                                  1. установить
                                    контролируемое изделие в центре
                                    инструментального микроскопа;

                                  2. вращением микровинта
                                    поперечного и продольного перемещения
                                    стола микроскопа добиться совмещения
                                    перекрестия штриховой шкалы окулярной
                                    головки с одной из сторон образующей
                                    конуса;

                                  3. совместить
                                    горизонтальную линию штриховой шкалы
                                    окулярной головки с образующей конуса.
                                    Снять показание на шкале барабана
                                    микровинта поперечного перемещения
                                    а1 и угла

                                    по угловой шкале. Полученные данные
                                    занести в табл.6.3;

                                  4. вращая барабан
                                    микровинта поперечного перемещения
                                    добиться того, чтобы перекрестие
                                    штриховой шкалы окулярной головки
                                    совместилось с образующей конуса на
                                    противоположной стороне;

                                  5. снять показание на
                                    шкале барабана микровинта поперечного
                                    перемещения а2. Результат измерения
                                    занести в табл.6.3;

                                  6. совместить
                                    горизонтальную линию штриховой шкалы
                                    окулярной головки с образующей конуса.
                                    Снять показания по угловой шкале

                                    Полученный результат занести в табл.6.3;

                                  7. определить значение
                                    угла

                                    по формуле

                                  1. определить диаметр
                                    конуса в первом сечении d

                                  d =|а1
                                  – а2|;

                                  1. при помощи концевой
                                    меры длины сместить конус на определенное
                                    расстояние L в продольном
                                    направлении и таким образом определить
                                    второе поперечное сечение конуса.
                                    Совместить перекрестие шкалы с образующей
                                    конуса. Снять показание b1
                                    на барабане микровинта продольного
                                    перемещения и угла

                                    по угловой шкале.. Полученный результат
                                    измерения занести в табл.6.3;

                                  Таблица 6.3

                                  Результаты измерения параметров
                                  конуса

                                  п/п

                                  Отсчет

                                  Диа-

                                  метр

                                  d

                                  Дли-

                                  на

                                  L

                                  Отсчет

                                  Диа-

                                  метр

                                  D

                                  Ко-

                                  нус-

                                  ность

                                  С

                                  Угол

                                  a1

                                  a2

                                  b1

                                  b2

                                  1

                                  2

                                  3

                                  1. вращая барабан
                                    микровинта поперечного перемещения
                                    добиться того, чтобы перекрестие
                                    штриховой шкалы окулярной головки
                                    совместилось с образующей конуса на
                                    противоположной стороне;

                                  2. снять показание на
                                    шкале барабана микровинта поперечного
                                    перемещения b2.
                                    Результат измерения занести в табл.6.3;

                                  3. совместить
                                    горизонтальную линию штриховой шкалы
                                    окулярной головки с образующей конуса.
                                    Снять показания по угловой шкале

                                    Полученный результат занести в табл.6.3;

                                  4. определить диаметр
                                    конуса во втором сечении D

                                  D = |b1
                                  – b2|;

                                  1. определить значение
                                    угла

                                    по формуле

                                  1. определить конусность
                                    С

                                  C = (D
                                  –d) / L;

                                  1. вращением барабана
                                    микровинта продольного перемещения
                                    сместить

                                  измеряемое изделие на 5-10 мм по отношению
                                  к последнему положению (пункт 9);

                                  1. повторить пункты
                                    2-12 для второго и третьего измерений.
                                    Заполнить табл.6.3;

                                  2. определить среднее
                                    значение конусности Сср

                                  и угол конуса.

                                  16) по
                                  полученным результатам Сср и

                                  по табл.4.1 определить конус и найти
                                  значение его параметров по ГОСТ;

                                  1. определить
                                    погрешности измерений:

                                  Δα =((
                                  αср – αгост ) / αгост
                                  ) · 100%

                                  ΔС =
                                  Сср – Сгост

                                  11

                                  Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

                                  • #
                                  • #
                                  • #
                                  • #
                                  • #
                                  • #
                                  • #
                                  • #
                                  • #
                                  • #
                                  • #

                                  В математике среднее значение круговых величин — это среднее значение, который иногда лучше подходит для таких величин, как углы, дневное время и дробные части действительных чисел. Это необходимо, поскольку большинство обычных средств может не подходить для круглых количеств. Например, среднее арифметическое 0 ° и 360 ° равно 180 °, что вводит в заблуждение, поскольку для большинства целей 360 ° — то же самое, что 0 °. В качестве другого примера, «среднее время» между 23:00 и 1:00 — это либо полночь, либо полдень, в зависимости от того, являются ли эти два времени частью одной ночи или частью одного календарного дня. Это один из простейших примеров статистики неевклидовых пространств.

                                  Содержание

                                  • 1 Среднее значение углов
                                  • 2 Свойства
                                  • 3 Пример
                                  • 4 См. Также
                                  • 5 Ссылки
                                  • 6 Внешние ссылки

                                  Среднее значение углов

                                  Поскольку среднее арифметическое не всегда подходит для углов, следующий метод может использоваться для получения как среднего значения, так и меры для отклонения углов:

                                  Преобразование всех углов в соответствующие точки на единичной окружности, например, α { displaystyle alpha} alpha в (соз ⁡ α, грех ⁡ α) { Displaystyle ( соз альфа, грех альфа)}( cos  alpha,  sin  alpha) . То есть преобразовать полярные координаты в декартовы координаты. Затем вычислите среднее арифметическое этих точек. Полученная точка будет находиться внутри единичного диска. Преобразуйте эту точку обратно в полярные координаты. Угол — это разумное среднее значение входных углов. Результирующий радиус будет равен 1, если все углы равны. Если углы равномерно распределены по окружности, то результирующий радиус будет 0, а среднего кругового нет. (Фактически, невозможно определить непрерывную операцию среднего на окружности.) Другими словами, радиус измеряет концентрацию углов.

                                  Учитывая углы α 1,…, α n { displaystyle alpha _ {1}, dots, alpha _ {n}} alpha _ {1},  dots,  alpha _ {n} общая формула среднее значение

                                  α ¯ = atan2 ⁡ (1 n ∑ j = 1 n sin ⁡ α j, 1 n ∑ j = 1 n cos ⁡ α j) = atan2 ⁡ (∑ j = 1 n sin ⁡ α j, ∑ j = 1 N соз ⁡ α j) { displaystyle { bar { alpha}} = operatorname {atan2} left ({ frac {1} {n}} sum _ {j = 1} ^ {n } sin alpha _ {j}, { frac {1} {n}} sum _ {j = 1} ^ {n} cos alpha _ {j} right) = operatorname {atan2} left ( sum _ {j = 1} ^ {n} sin alpha _ {j}, sum _ {j = 1} ^ {n} cos alpha _ {j} right)}{ displaystyle { bar { alpha}} =  operatorname {atan2}  left ({ frac {1} {n}}  sum _ {j = 1} ^ {n}  sin  alpha _ {j}, { frac {1} {n}}  sum _ {j = 1} ^ {n}  cos  alpha _ {j}  right) =  operatorname {atan2}  left ( сумма _ {j = 1} ^ {n}  sin  alpha _ {j},  sum _ {j = 1} ^ {n}  cos  alpha _ {j}  right)}

                                  используя вариант atan2 функции арктангенс, или

                                  α ¯ = arg ⁡ (∑ j = 1 n exp ⁡ (i ⋅ α j)) { displaystyle { bar { alpha}} = arg left ( sum _ {j = 1} ^ {n} exp (i cdot alpha _ {j}) right)}{ displaystyle { bar { alpha}} =  arg  left ( sum _ {j = 1} ^ {n}  exp (i  cdot  alpha _ {j})  right)}

                                  с использованием комплексных чисел. Чтобы соответствовать приведенному выше выводу с использованием среднего арифметического баллов, суммы должны быть разделены на n { displaystyle n}n . Однако масштабирование не имеет значения для atan2 { displaystyle operatorname {atan2}}{ displaystyle  operatorname {atan2}} и arg { displaystyle arg}{ displaystyle  arg} , поэтому его можно опустить..

                                  Это вычисление дает результат, отличный от среднего арифметического, причем разница больше, когда углы широко распределены. Например, среднее арифметическое трех углов 0 °, 0 ° и 90 ° составляет (0 + 0 + 90) / 3 = 30 °, а среднее арифметическое составляет 26,565 °. Более того, с помощью среднего арифметического круговая дисперсия определяется только ± 180 °.

                                  Свойства

                                  Круговое среднее α ¯ { displaystyle { bar { alpha}}}{ bar { alpha}}

                                  • максимизирует вероятность среднего параметра распределение фон Мизеса и
                                  • минимизирует сумму определенного расстояния на окружности, точнее
                                  α ¯ = argmin β ∑ j = 1 nd (α j, β), где d (φ, β) = 1 — cos ⁡ (φ — β). { displaystyle { bar { alpha}} = { underset { beta} { operatorname {argmin}}} sum _ {j = 1} ^ {n} d ( alpha _ {j}, beta), { текст {где}} d ( varphi, beta) = 1- cos ( varphi — beta).}{ displaystyle { bar { alpha}} = { underset { beta} { operatorname {argmin}}}  sum _ {j = 1} ^ {n} d ( alpha _ {j},  beta), { text {where}} d ( varphi,  beta) = 1-  cos ( varphi -  beta).}
                                  расстояние d (φ, β) { displaystyle d ( varphi, beta)}d ( varphi,  beta) равно половине квадрата евклидова расстояния между двумя точками на единичной окружности, связанной с φ { displaystyle varphi} varphi и β { displaystyle beta} beta .

                                  Пример

                                  Простой способ вычислить среднее значение серии углов (в интервале [0 °, 360 °)) — это вычислить среднее значение косинусов и синусов каждого угла и получить угол, вычислив арктангенс. В качестве примера рассмотрим следующие три угла: 10, 20 и 30 градусов. Интуитивно, вычисление среднего значения потребовало бы сложения этих трех углов вместе и деления на 3, что в данном случае действительно привело бы к правильному среднему углу в 20 градусов. При повороте этой системы против часовой стрелки на 15 градусов три угла становятся 355 градусов, 5 градусов и 15 градусов. Наивное среднее значение теперь составляет 125 градусов, что является неправильным ответом, поскольку должно быть 5 градусов. Среднее векторное θ ¯ { textstyle { bar { theta}}}{ textstyle { bar { theta}}} можно вычислить следующим образом, используя средний синус s ¯ { textstyle { bar { s}}}{ textstyle { bar {s}}} и средний косинус c ¯ ≠ 0 { textstyle { bar {c}} not = 0}{ textstyle { bar {c}}  not = 0} :

                                  s ¯ = 1 3 (sin ⁡ (355 ∘) + грех ⁡ (5 ∘) + грех ⁡ (15 ∘)) = 1 3 (- 0,087 + 0,087 + 0,259) ≈ 0,086 { displaystyle { bar {s}} = { frac {1} {3}} left ( sin (355 ^ { circ}) + sin (5 ^ { circ}) + sin (15 ^ { circ}) right) = { frac {1} {3}} влево (-0,087 + 0,087 + 0,259 вправо) приблизительно 0,086} bar s =  frac { 1} {3}  left ( sin (355 ^  circ) +  sin (5 ^  circ) +  sin (15 ^  circ)  right) =  frac {1} {3}  left (- 0,087 + 0,087 + 0,259  справа)  приблизительно 0,086
                                  c ¯ = 1 3 (cos ⁡ (355 ∘) + cos ⁡ (5) + cos ⁡ (15)) = 1 3 (0,996 + 0,996 + 0,966) ≈ 0,986 { displaystyle { bar {c}} = { frac {1} {3}} left ( cos (355 ^ { circ}) + cos (5 ^ { circ }) + cos (15 ^ { circ}) right) = { frac {1} {3}} left (0,996 + 0,996 + 0,966 right) приблизительно 0,986} bar c =  frac {1} {3}  left ( cos (355 ^  circ) +  cos (5 ^  circ) +  cos (15 ^  circ)  right) =  frac {1} {3}  left (0,996 + 0,996 + 0,966  right)  приблизительно 0,986
                                  θ ¯ = {arctan ⁡ (s ¯ c ¯) s ¯>0, c ¯>0 arctan ⁡ (s ¯ c ¯) + 180 ∘ c ¯ < 0 arctan ⁡ ( s ¯ c ¯) + 360 ∘ s ¯ < 0, c ¯>0} = arctan ⁡ (0,086 0,986) = arctan ⁡ (0,087) = 5 ∘. { displaystyle { bar { theta}} = left. { begin {case} arctan left ({ frac { bar {s}} { bar {c}}} right) { bar {s}}>0, { bar {c}}>0 \ arctan left ({ frac { bar {s}} { bar {c}}} right) + 180 ^ { circ} { bar {c}} <0\arctan left({frac {bar {s}}{bar {c}}}right)+360^{circ }{bar {s}}<0, {bar {c}}>0 end {case}} right } = arctan left ({ frac {0.086} {0.986}} right) = arctan (0,087) = 5 ^ { circ}.} bar theta = left. begin{cases} arctan left( frac{bar s}{ bar c} right) bar s>0,   bar c>0 \  arctan  left ( frac { bar s} { bar c}  right) + 180 ^  circ  bar c < 0 \ arctan left (frac{bar s}{bar c} right)+360^circ bar s <0, bar c>0  end {case}  right } =  arctan  left ( frac {0.086} {0.986}  right) =  arctan (0,087) = 5 ^  circ.

                                  Это может быть более лаконично понимая, что направленные данные на самом деле являются векторами единичной длины. В случае одномерных данных эти точки данных могут быть удобно представлены как комплексные числа единичной величины z = cos ⁡ (θ) + i sin ⁡ ( θ) знак равно ei θ { displaystyle z = cos ( theta) + i , sin ( theta) = e ^ {i theta}}z =  cos ( theta) + i ,  sin ( theta) = е ^ {я  тета} , где θ { displaystyle theta} theta — измеренный угол. Среднее значение результирующего вектора для выборки будет:

                                  ρ ¯ = 1 N ∑ n = 1 N zn. { displaystyle { overline { mathbf { rho}}} = { frac {1} {N}} sum _ {n = 1} ^ {N} z_ {n}.} overline { mathbf { rho}} =  frac {1} {N}  sum_ {n = 1} ^ N z_n.

                                  Тогда выборочный средний угол равен аргумент среднего результирующего:

                                  θ ¯ = A rg (ρ ¯). { Displaystyle { overline { theta}} = mathrm {Arg} ({ overline { mathbf { rho}}}).} overline { theta} =  mathrm {Arg} ( overline { mathbf { rho}}).

                                  Длина результирующего вектора выборочного среднего составляет:

                                  R ¯ = | ρ ¯ | { displaystyle { overline {R}} = | { overline { mathbf { rho}}} |} overline {R} = |  overline { mathbf { rho}} |

                                  и будет иметь значение от 0 до 1. Таким образом, результирующий вектор выборочного среднего может быть представлен как:

                                  ρ ¯ = R ¯ ei θ ¯. { displaystyle { overline { mathbf { rho}}} = { overline {R}} , e ^ {i { overline { theta}}}.} overline { mathbf { rho}} =  overline {R} , e ^ {i  overline { theta}}.

                                  Подобные вычисления также используются для определения круговая дисперсия.

                                  См. также

                                  • Направленная статистика
                                  • Круговое распределение
                                  • Центроид
                                  • Центр масс

                                  Ссылки

                                  Джаммаламадака, С. Рао и СенГупта, А.. (2001). Темы циркулярной статистики, раздел 1.3, World Scientific Press, Сингапур. ISBN 981-02-3778-2

                                  1. ^Кристофер М. Бишоп: Распознавание образов и машинное обучение (информатика и статистика), ISBN 0-387-31073-8

                                  Внешние ссылки

                                  • Математика и статистика круговых значений с C ++ 11, инфраструктура C ++ 11 для круговых значений (углы, время суток и т. Д.) математика и статистика

                                  Усреднение углов… Опять

                                  Я хочу вычислить среднее значение из набора углов, который представляет исходный азимут (от 0 до 360 градусов) — (аналогично направлению ветра)

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

                                  Однако этот ответ определяет среднее не интуитивным способом. Среднее значение 0, 0 и 90 будет atan( (sin(0)+sin(0)+sin(90)) / (cos(0)+cos(0)+cos(90))) = atan(1/2)= 26,56 град

                                  Я ожидаю, что среднее значение 0, 0 и 90 будет 30 градусов.

                                  Поэтому я думаю, что было бы справедливо задать вопрос еще раз: как бы вы рассчитали среднее значение, поэтому такие примеры дадут интуитивный ожидаемый ответ.

                                  Изменить 2014:

                                  Задав этот вопрос, я разместил статью о CodeProject, в которой предлагается тщательный анализ. В статье рассматриваются следующие справочные задачи:

                                  • Приведенное время суток [00:00-24:00) для каждого рождения, произошедшего в США в 2000 году. Рассчитать среднее время рождения при рождении.
                                  • При наличии множества измерений направления от стационарного передатчика к стационарному приемнику с использованием методики измерения с обернутой нормальной распределенной ошибкой — оцените направление.
                                  • Учитывая мультимножество оценок азимута между двумя точками, сделанных «обычными» людьми (при условии, что они подверглись усеченной усеченной нормальной распределенной ошибке) — Оцените направление.

                                  2009-11-28 19:19

                                  11
                                  ответов

                                  Решение

                                  Спасибо всем за то, что помогли мне увидеть мою проблему более четко.

                                  Я нашел то, что искал. Это называется метод Мицуты.

                                  Входы и выходы находятся в диапазоне [0..360).

                                  Этот метод хорош для усреднения данных, которые были отобраны с использованием постоянных интервалов выборки.

                                  В этом методе предполагается, что разница между последовательными выборками составляет менее 180 градусов (что означает, что если мы не будем производить выборку достаточно быстро, изменение дискретизированного сигнала на 330 градусов будет неправильно определено как изменение на 30 градусов в другом направлении и будет вставить ошибку в расчет). Теорема отсчетов Найквиста – Шеннона?

                                  Вот код C++:

                                  double AngAvrg(const vector<double>& Ang)
                                  {
                                      vector<double>::const_iterator iter= Ang.begin();
                                  
                                      double fD   = *iter;
                                      double fSigD= *iter;
                                  
                                      while (++iter != Ang.end())
                                      {
                                          double fDelta= *iter - fD;
                                  
                                               if (fDelta < -180.) fD+= fDelta + 360.;
                                          else if (fDelta >  180.) fD+= fDelta - 360.;
                                          else                     fD+= fDelta       ;
                                  
                                          fSigD+= fD;
                                      }
                                  
                                      double fAvrg= fSigD / Ang.size();
                                  
                                      if (fAvrg >= 360.) return fAvrg -360.;
                                      if (fAvrg <  0.  ) return fAvrg +360.;
                                                         return fAvrg      ;
                                  }
                                  

                                  Это объясняется на странице 51 по адресу http://www.epa.gov/scram001/guidance/met/mmgrma.pdf

                                  Спасибо Маре за отправку ссылки в качестве комментария.

                                  Если данные выборки являются постоянными, но наше устройство для выборки имеет неточность с распределением фон Мизеса, будет уместным вычисление единичных векторов.

                                  2009-12-01 19:11

                                  [Обратите внимание, что вопрос ОП (но не заголовок), по-видимому, изменился на довольно специализированный вопрос («… среднее ПОСЛЕДОВАТЕЛЬНОСТИ углов, где каждое последующее сложение не отличается от скользящего среднего более чем на определенную величину».) — см. @MaR комментарий и мой.Мой следующий ответ касается названия ОП и основной части обсуждения и ответов, связанных с ним.]

                                  Это не вопрос логики или интуиции, а определения. Это обсуждалось на SO раньше без какого-либо реального консенсуса. Углы должны быть определены в пределах диапазона (который может быть от -PI до +PI, или от 0 до 2*PI или может быть от -Inf до +Inf. Ответы будут разными в каждом случае.

                                  Мир «угол» вызывает путаницу, поскольку это означает разные вещи. Угол зрения представляет собой величину без знака (и обычно это PI > theta > 0. В этом случае могут быть полезны «нормальные» средние значения. Угол поворота(например, общее вращение, если фигуристка) может или не может быть подписан и может включать в себя тета> 2* пи и тета <-2 * пи.

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

                                  Википедия показывает правильный подход, когда углы определяются кругово, так что

                                  theta = theta+2*PI*N = theta-2*PI*N
                                  

                                  Ответом для среднего является НЕ скаляр, а вектор. ОП может не чувствовать, что это интуитивно понятно, но это единственный полезный правильный подход. Мы не можем переопределить квадратный корень из -4, чтобы он был равен -2, потому что это более наглядно — это должно быть +-2*i. Точно так же среднее значение подшипников -90 градусов и +90 градусов — это вектор нулевой длины, а не 0,0 градусов.

                                  Википедия ( http://en.wikipedia.org/wiki/Mean_of_circular_quantities) имеет специальный раздел и состояния (Уравнения LaTeX и их можно увидеть в Википедии):

                                  Большинство обычных средних значений терпят неудачу на круглых величинах, таких как углы, дневное время, дробные части действительных чисел. Для этих величин вам нужно среднее значение круговых величин.

                                  Поскольку среднее арифметическое не является эффективным для углов, можно использовать следующий метод для получения как среднего значения, так и показателя дисперсии углов:

                                  Переведите все углы в соответствующие точки на единичной окружности, например, α в (cosα,sinα). То есть конвертировать полярные координаты в декартовы. Затем вычислите среднее арифметическое этих точек. Полученная точка будет лежать на диске устройства. Переведите эту точку обратно в полярные координаты. Угол является разумным средним из входных углов. Результирующий радиус будет 1, если все углы равны. Если углы равномерно распределены по окружности, то результирующий радиус будет равен 0, а круговое среднее отсутствует. Другими словами, радиус измеряет концентрацию углов.

                                  Учитывая углы alpha_1,dots,alpha_n, среднее значение вычисляется как

                                  M alpha = operatorname{atan2}left(frac{1}{n}cdotsum_{j=1}^n
                                  

                                  sinalpha_j,
                                  frac{1}{n}cdotsum_{j=1}^n
                                  cosalpha_jright)

                                  используя вариант функции арктангенса atan2, или

                                  M alpha = argleft(frac{1}{n}cdotsum_{j=1}^n
                                  

                                  Ехр ( CDOT alpha_j) справа)

                                  используя комплексные числа.

                                  Обратите внимание, что в вопросе OP угол 0 является чисто произвольным — нет ничего особенного в том, что ветер приходит от 0, а не к 180 (за исключением того, что в этом полушарии на велосипеде холоднее). Попробуйте изменить 0,0,90 на 289, 289, 379 и посмотрите, как простая арифметика больше не работает.

                                  (Есть некоторые распределения, где углы 0 и PI имеют особое значение, но они здесь не входят в объем).

                                  Вот некоторые интенсивные предыдущие обсуждения, которые отражают текущее распространение взглядов:-)

                                  http://mathforum.org/library/drmath/view/53924.html

                                  Как вы рассчитываете среднее значение для набора циклических данных?

                                  http://forums.xkcd.com/viewtopic.php?f=17&t=22435

                                  http://www.allegro.cc/forums/thread/595008

                                  2009-11-28 21:15

                                  Что это вообще значит для среднего источника подшипников? Начните с ответа на этот вопрос, и вы приблизитесь к тому, чтобы определить, что вы подразумеваете под средним углом.

                                  На мой взгляд, угол с касательной, равной 1/2, является правильным ответом. Если у меня есть единичная сила, толкающая меня в направлении вектора (1, 0), другая сила, толкающая меня в направлении вектора (1, 0), и третья сила, толкающая меня в направлении вектора (0, 1).), то результирующая сила (сумма этих сил) — это сила, толкающая меня в направлении (1, 2). Это векторы, представляющие подшипники 0 градусов, 0 градусов и 90 градусов. Угол, представленный вектором (1, 2), имеет касательную, равную 1/2.

                                  Отвечая на ваше второе редактирование:

                                  Допустим, мы измеряем направление ветра. Наши 3 измерения были 0, 0 и 90 градусов. Поскольку все измерения одинаково надежны, почему наша лучшая оценка направления ветра не должна составлять 30 градусов? установка его на 25,56 градусов — это смещение в сторону 0…

                                  Хорошо, вот проблема. Единичный вектор с углом 0 не обладает такими же математическими свойствами, как действительное число 0. Использование обозначений 0v чтобы представить вектор с углом 0, обратите внимание, что

                                  0v + 0v = 0v
                                  

                                  ложно, но

                                  0 + 0 = 0
                                  

                                  верно для реальных чисел. Так что если 0v представляет ветер с единичной скоростью и углом 0, то 0v + 0v ветер с удвоенной единицей скорости и углом 0. А потом, если у нас есть третий вектор ветра (который я буду представлять с помощью обозначения 90v), который имеет угол 90 и единичную скорость, то ветер, возникающий из суммы этих векторов, имеет уклон, потому что он движется с удвоенной частотой вращения в горизонтальном направлении, но только с единичной скоростью в вертикальном направлении.


                                  user45914

                                  29 ноя ’09 в 18:08
                                  2009-11-29 18:08

                                  2009-11-29 18:08

                                  Это неверно на каждом уровне.

                                  Векторы добавляются в соответствии с правилами сложения векторов. «Интуитивный, ожидаемый» ответ может быть не таким интуитивным.

                                  Возьмите следующий пример. Если у меня есть один единичный вектор (1, 0) с источником в (0,0), который указывает в направлении +x, и другой (-1, 0), который также имеет начало в (0,0), который указывает в -x-направление, каким должен быть «средний» угол?

                                  Если я просто добавлю углы и разделю на два, я могу утверждать, что «среднее» составляет либо +90, либо -90. Как вы думаете, какой из них должен быть?

                                  Если я добавлю векторы в соответствии с правилами сложения векторов (компонент за компонентом), я получу следующее:

                                  (1, 0) + (-1, 0) = (0, 0)

                                  В полярных координатах это вектор с нулевой величиной и нулевым углом.

                                  Так каким должен быть «средний» угол? У меня есть три разных ответа для простого случая.

                                  Я думаю, что ответ заключается в том, что векторы не подчиняются той же интуиции, что и числа, потому что они имеют величину и направление. Может быть, вам лучше описать, какую проблему вы решаете.

                                  Какое бы решение вы ни выбрали, я бы посоветовал вам основывать его на векторах. Так будет всегда правильно.


                                  user37213

                                  28 ноя ’09 в 19:33
                                  2009-11-28 19:33

                                  2009-11-28 19:33

                                  Изменить: Эквивалентный, но более надежный алгоритм (и более простой):

                                  1. разделить углы на 2 группы, [0-180) и [180-360)
                                  2. численно среднее значение обеих групп
                                  3. усредните 2 средних по группе с правильным взвешиванием
                                  4. если произошло завертывание, исправить на 180˚

                                  Это работает, потому что усреднение чисел работает «логически», если все углы находятся в одном и том же полукруге. Затем мы откладываем получение ошибки обтекания до самого последнего шага, где ее легко обнаружить и исправить. Я также добавил некоторый код для обработки случаев с противоположными углами. Если средние значения противоположны, мы отдаем предпочтение полусфере, в которой было больше углов, а в случае равных углов в обоих полушариях мы возвращаемся None потому что никакой средний не будет иметь смысла.

                                  Новый код:

                                  def averageAngles2(angles):
                                      newAngles = [a % 360 for a in angles];
                                      smallAngles = []
                                      largeAngles = []
                                      # split the angles into 2 groups: [0-180) and [180-360)
                                      for angle in newAngles:
                                          if angle < 180:
                                              smallAngles.append(angle)
                                          else:
                                              largeAngles.append(angle)
                                      smallCount = len(smallAngles)
                                      largeCount = len(largeAngles)
                                      #averaging each of the groups will work with standard averages
                                      smallAverage = sum(smallAngles) / float(smallCount) if smallCount else 0
                                      largeAverage = sum(largeAngles) / float(largeCount) if largeCount else 0
                                      if smallCount == 0:
                                          return largeAverage
                                      if largeCount == 0:
                                          return smallAverage
                                      average = (smallAverage * smallCount + largeAverage * largeCount) / 
                                          float(smallCount + largeCount)
                                      if largeAverage < smallAverage + 180:
                                          # average will not hit wraparound
                                          return average
                                      elif largeAverage > smallAverage + 180:
                                          # average will hit wraparound, so will be off by 180 degrees
                                          return (average + 180) % 360
                                      else:
                                          # opposite angles: return whichever has more weight
                                          if smallCount > largeCount:
                                              return smallAverage
                                          elif smallCount < largeCount:
                                              return largeAverage
                                          else:
                                              return None
                                  
                                  >>> averageAngles2([0, 0, 90])
                                  30.0
                                  >>> averageAngles2([30, 350])
                                  10.0
                                  >>> averageAngles2([0, 200])
                                  280.0
                                  

                                  Вот немного наивный алгоритм:

                                  1. убрать все углы откоса из списка
                                  2. взять пару углов
                                  3. поверните их в первый и второй квадрант и усредните их
                                  4. повернуть средний угол назад на ту же величину
                                  5. для каждого оставшегося угла усредните таким же образом, но с последовательно увеличивающимся весом до составного угла

                                  некоторый код на Python (шаг 1 не реализован)

                                  def averageAngles(angles):
                                      newAngles = [a % 360 for a in angles];
                                      average = 0
                                      weight = 0
                                      for ang in newAngles:
                                          theta = 0
                                          if 0 < ang - average <= 180:
                                              theta = 180 - ang
                                          else:
                                              theta = 180 - average
                                          r_ang = (ang + theta) % 360
                                          r_avg = (average + theta) % 360
                                          average = ((r_avg * weight + r_ang) / float(weight + 1) - theta) % 360
                                          weight += 1
                                      return average
                                  


                                  user73681

                                  28 ноя ’09 в 19:35
                                  2009-11-28 19:35

                                  2009-11-28 19:35

                                  Вот ответ, который я дал на этот же вопрос:

                                  Как вы рассчитываете среднее значение для набора циклических данных?

                                  Это дает ответы в соответствии с тем, что ОП говорит, что он хочет, но внимание должно быть уделено этому:

                                  «Я также хотел бы подчеркнуть, что хотя это истинное среднее углов, в отличие от векторных решений, это не обязательно означает, что это решение, которое вы должны использовать, среднее значение соответствующих единичных векторов вполне может быть значением, которое вы на самом деле следует использовать «.

                                  2010-09-06 13:52

                                  На мой взгляд, речь идет об углах, а не векторах. По этой причине среднее значение 360 и 0 действительно равно 180. Среднее значение за один оборот и без поворотов должно быть половиной оборота.

                                  2009-11-28 19:38

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

                                  Я не знаю, дает ли это вам то, что вы хотите, потому что кватернионы — это скорее вращения, чем углы. Я также не знаю, даст ли это вам что-то отличное от векторного решения.

                                  Кватернионы в 2D упрощаются до комплексных чисел, так что я думаю, что это просто векторы, но, возможно, какой-нибудь интересный алгоритм усреднения кватернионов, например http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20070017872_2007014421.pdf при упрощении до 2D будет вести себя лучше, чем просто векторное среднее.

                                  2009-12-01 21:19

                                  Вы можете сделать это: скажем, у вас есть набор углов в массиве angleЗатем для вычисления массива сначала выполните: angle[i] = angle[i] mod 360Теперь выполните простое среднее по массиву. Поэтому, когда у вас есть 360, 10, 20, вы в среднем 0, 10 и 20 — результаты интуитивно понятны.

                                  2009-11-28 19:34

                                  Ну вот! Ссылка https://www.wxforum.net/index.php?topic=8660.0

                                  def avgWind(directions):
                                      sinSum = 0
                                      cosSum = 0
                                      d2r = math.pi/180 #degree to radian
                                      r2d = 180/math.pi
                                         
                                      for i in range(len(directions)):
                                          sinSum += math.sin(directions[i]*d2r)
                                          cosSum += math.cos(directions[i]*d2r)
                                        
                                      return ((r2d*(math.atan2(sinSum, cosSum)) + 360) % 360)
                                  a= np.random.randint(low=0, high=360, size=6)
                                  print(a)
                                  avgWind(a)
                                  

                                  2020-11-06 07:08

                                  Что плохого в том, чтобы принимать набор углов в качестве реальных значений и просто вычислять среднее арифметическое этих чисел? Тогда вы получите интуитивный (0+0+90)/3 = 30 градусов.

                                  Редактировать: Спасибо за полезные комментарии и указание, что углы могут превышать 360. Я считаю, что ответом может быть обычное среднее арифметическое значение, уменьшенное по модулю 360: мы суммируем все значения, делим на количество углов и затем вычитаем / добавляем кратное 360, так что результат лежит в интервале [0..360).

                                  2009-11-28 19:24

                                  Я думаю, что проблема связана с тем, как вы относитесь к углам больше 180 (и к углам больше 360). Если вы уменьшите углы до диапазона от +180 до -180, прежде чем добавить их к общему значению, вы получите нечто более разумное:

                                  int AverageOfAngles(int angles[], int count)
                                  {
                                      int total = 0;
                                      for (int index = 0; index < count; index++)
                                      {
                                          int angle = angles[index] % 360;
                                          if (angle > 180) { angle -= 360; }
                                          total += angle;
                                      }
                                  
                                      return (int)((float)total/count);
                                  }
                                  


                                  user33686

                                  28 ноя ’09 в 19:41
                                  2009-11-28 19:41

                                  2009-11-28 19:41

                                  Математика - Формулы, Задачи, Форум

                                  Для участия в математическом форуме регистрация не требуется!

                                  Посчитать средний угол

                                  • Ответить с цитатой

                                  Посчитать средний угол

                                  Здравствуйте.
                                  В математики я ноль.
                                  Что-бы не покупать дорогой инструмент для вычисления отклонения углов, я забрел к вам на форум за помощью, в надежде на то что вы мне покажете алгоритм вычисления углов.
                                  Буду объяснять на своём языком. Размеры в миллиметрах.
                                  Имеем не ровный куб в виде кирпича, Нижняя и верхняя плоскость одинаковы, высота боковые плоскостей не одинакова.
                                  Высота в углах 710, 700, 695, 690. Смотрите на фото.
                                  Берем среднюю высоту 700 или(например 698), нужно от 700 или (698) посчитать сколько отклонение в градусах ко всем высотам. Нужно что бы высота была одинаковая 700.?
                                  Для меня это вычисли всё равно что собрать космический корабль во дворе из под ручных средств.

                                  Вложения
                                  два.jpg
                                  два.jpg (954.17 КБ) Просмотров: 7620
                                  один.jpg
                                  один.jpg (1018.62 КБ) Просмотров: 7620
                                  Гость
                                   


                                  • Ответить с цитатой

                                  Re: Посчитать средний угол

                                  Сообщение Rados » Ср янв 23, 2019 3:30 pm

                                  СтудПом писал(а): что за инструмент вы не хотите покупать?

                                  Строители называют такой инструмент «уровнем».
                                  А в математике такого понятия как «средний угол» не существует, увы…
                                  Очевидно, автор этого вопроса хочет выровнять углы этого параллелепипеда по средне-арифметической ВЫСОТЕ?
                                  Для этого, действительно, покупать строительный уровень не требуется.

                                  Аватара пользователя
                                  Rados
                                   
                                  Сообщения: 3508
                                  Зарегистрирован: Вт ноя 20, 2018 8:36 am
                                  Откуда: РОССИЯ


                                  Вернуться в Другое

                                  Кто сейчас на конференции

                                  Сейчас этот форум просматривают: Yandex [Bot] и гости: 1

                                  Понравилась статья? Поделить с друзьями:
                                • Как исправить свою кредитную историю в сбербанке бесплатно
                                • Как найти алгоритм в игре
                                • Ошибка при запуске приложения 0xc00000142 windows 10 как исправить
                                • Как найти низкие цены в аптеках
                                • Как найти калорийность салата