2013-02-26 3 views
-2

Мне нужно установить значение альфа-значения, которое получено из значения поплавка.Простая формула для алгоритма с поплавком

Я список пар поплавка: альфа ниже, и я надеюсь, что вы, ребята, можете дать мне простую корреляцию:

Float:Alpha 
0:0 
6:0.5 
12:1 
18:0.5 
24:0 

Максимальное значение поплавка 24, альфа не может быть больше, чем 1. Между значениями должно быть что-то параболическое/синусоидальное, с высоким разрешением.

Я подозреваю, что все это связано с модулем. Пожалуйста, помогите мне!

Было бы полезно, если бы вы могли выразить формулу в синтаксисе Objective-C.

Благодаря

Edit: сделать себе ясно: Левый столбец значение вход, правый столбец выходное значение.

Перефразируя Дэвид:

«Привет, вот мой вклад: 0, 6, 12, 18,24 и вот мой результат: 0, 0,5, 1, 0,5, 0. Мне нужно обобщить решение Хэлп.

+1

Я мог бы просто быть глупым, но что мне нужно, чтобы установить значение альфа-значения, которое получено из значения поплавка ». имею в виду? –

+0

Как вы получаете эти пары ключевых значений? –

+0

Если вам нужно что-то синусоидальное, то, возможно, функция 'sin' поможет. –

ответ

0

Формула Я хотел бы использовать это:

CGFloat alpha = sin(radius/24.0 * M_PI); 

Это дает 0 для 0 и 24, 1 для 12 и правильную синусоидальную волну для значений между ними.

Обратите внимание, что 0,5 для 6 и 18 являются недопустимыми значениями для правильной синусоидальной волны. 0.707 подходит для синусоидальной волны для 6 и 18.

+0

0.5 действует для 6 и 18, если синусоидальная волна центрирована вокруг y = 0,5 с амплитудой 0,5. –

+0

Это делает это для меня. Я поиграю с ответом Андрея, чтобы увидеть, что я сделал неправильно. Большое спасибо! – Sjakelien

+0

@AndrewCooper True. Мой ответ был основан на стандартной синусоидальной единице. – rmaddy

1

Если вы хотите синусоидальный формула вы ищете это:

-(cos(n * pi/12) - 1)/2 

Где п значение от 0 до 24.

+0

Уважаемый Андрей, если я сделаю - (void) setBackgroundColor: (двойной) радиус { int myAlpha = - (cos (радиус * M_PI/12) + 1)/2; NSLog (@ "myAlpha =% i", myAlpha); } Я просто получаю значения 0 и 1. – Sjakelien

+0

Потому что вы преобразовываете вывод в 'int'. Вы должны сохранить результат с плавающей запятой как «double». –