MATLAB находит элемент массива и условно добавляет к константе

Учитывая этот массив углов:

  123.5280
  129.5280
  129.0130
  136.2960
  139.1640
  145.7430
  148.9800
  156.9080
  168.3440
  179.2340
    3.0840
    3.9720

Я хотел бы определить те, которые ‹ 90 градусов

angles(angles < 90)

ans =

    3.0840
    3.9720

и добавить 180 только к тем двум, которые в результате

  123.5280
  129.5280
  129.0130
  136.2960
  139.1640
  145.7430
  148.9800
  156.9080
  168.3440
  179.2340
  183.0840
  183.9720

Как мне этого добиться?


person pepe    schedule 22.02.2015    source источник
comment
@Jubobs: больше нечего добавить. Сделайте это ответом!   -  person knedlsepp    schedule 22.02.2015
comment
спасибо @Jubobs - пожалуйста, добавьте это как ответ, чтобы я мог поставить галочку   -  person pepe    schedule 22.02.2015


Ответы (2)


Поведение, которое вы ищете, называется (этапной) разверткой, и есть встроенная функция unwrap для этого

res = unwrap(angles / 90 * pi) / pi * 90

Обратите внимание, что unwrap работает в радианах и для скачков +/-pi, а не 2*pi, как вы просите, поэтому я намеренно масштабирую с 90 * pi вместо 180 * pi. Также см. обсуждение здесь.

person mbschenkel    schedule 22.02.2015

Решение в одну строку:

angles=angles+(angles<90)*180;
person Олег Паничев    schedule 22.02.2015