Objective-C, как мне «повернуть» «угловое» значение - PullRequest
1 голос
/ 16 февраля 2011

Хорошо, я согласен, моя математика ржавая и она воняет , и мой мозг сейчас совершенно пуст.

У меня есть функция, которая доставляет мне углы в диапазоне от 0 до360 градусов (или от 0 до 2PI, если вы предпочитаете).Когда я использую эту функцию с данными гироскопа, я вижу, что когда в нем указано, что устройство находится на уровне 270 градусов, оно фактически равно нулю градусов.Итак, если я поверну его от 270 до 360, мне нужно, чтобы углы варьировались от 0 до 90.

Как мне преобразовать это?

Если я просто вычту 270 градусов из значенийиду, я закончу отрицательными углами, и я не хочу этого.Мне нужно сдвинуть значения так:

270 degrees... will become zero,
360 (=0)... will become 90,
90 will be 180 and
180 will be 270.

Как мне сместить это математически, говоря.

спасибо.

Ответы [ 4 ]

2 голосов
/ 16 февраля 2011

Вы также можете прогуляться по модулю переулку.Основной трюк состоит в том, чтобы сохранить положительные степени и затем использовать модуль по модулю, так что остаток от деления.Конечно, поворот на 270 градусов в одном направлении аналогичен повороту на 90 градусов в другом направлении, поэтому моя реализация выглядит следующим образом:

- (NSInteger) convertAngle:(NSInteger)oldAngle {
  NSInteger newAngle = oldAngle + 90;
  return newAngle%360;
}
1 голос
/ 16 февраля 2011
double trans(double ang) { 
  ang+=270; 
  return (ang>=360)?ang-360:ang; 
}

Или за один шаг:

double trans(double ang) {
 return (ang>=90)?ang-90:ang+270;
}
0 голосов
/ 16 февраля 2011

Я думаю, что это сделает

float angle = gyroscopeValue;
angle += 90;
if(angle == 360)
    angle = 90;
if(angle == 270)
    angle =0;
0 голосов
/ 16 февраля 2011

Я верю, что вы хотите:

- (NSInteger)adjustedDegrees:(NSInteger)degrees {
    return ((degrees - 270) % 360);
}

Вы можете использовать так называемую модульную арифметику, которая выполняет вычитание, а затем получает положительный остаток после деления на 360 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...