2010-06-11 4 views
0

Хотя я кодирую в Objective C, это скорее общий вопрос программирования.
Каков наилучший способ преобразования постоянно изменяющегося скалярного значения в изменяющийся интервал или частоту?Преобразование постоянно изменяющегося скалярного значения в изменяющийся интервал или частоту

Сейчас каждый раз, когда скалярные значение изменяется я разрушив NSInterval
т.е.

[self.myTimer invalidate]; 
    self.myTimer = nil; 

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

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

ответ

1

Во-первых, поймите, что это проблема измерения. Чтобы решить эту проблему, выделите минимальные атрибуты, необходимые для решения проблемы, и выведите остальные.

Расстояние перемещено, и время, затраченное на перемещение расстояния, является производным атрибутом каждого измерения, в этом случае измерение называется «салфетки». В гоночной аналогии измерение называется кругом. Теперь можно вычислить «скорость». Это будет «скорость», которая является просто расстоянием/временем.

distance можно рассчитать, учитывая начальную и конечную точки салфетки. Для получения значения времени, создать startTime экземпляр NSDate в touchesBegan:withEvents: и в touchesEnded:withEvents: расчете elapsedTimeInterval с помощью [startTime timeIntervalSinceNow];

В зависимости от ваших потребностей, вы, возможно, потребуетесь Measurement класса со свойствами для StartPosition, конечного положения, STARTTIME и Конечного времени, так что вы можете отслеживать «самую быструю» скорость и т. д.

Посмотрите Analysis Patterns на Martin Fowler. Я считаю это очень полезным при попытке сопоставить проблемы домена с программными решениями.

+0

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