1

これは、Objective-C のスライダー コントロールに関連する質問ですが、そこにある数学に関する質問だと思います...

私は2つの値を持っています:

分 = 20; 最大 = 1000;

私は別の値も持っています:

インク = 10;

ユーザーがスライダー コントロールをスライドすると、10 個の均等に分散されたスナップ ポイントで最小値と最大値の間の出力値を表示したいと考えています。

各スナップ ポイントは次の値を出力する必要があります。

最小 + x*inc;

x は、スナップ ポイントがスライダー上にあるほど大きくなります。

出力が最小値と最大値の間で徐々に指数関数的に増加するようにしたいので、ユーザーがスライダーの上部に近づくほど増分が大きくなります。

例: 20、30、50、100、180、280、420、600、800、1000

これを達成し、最小と最大の間で指数関数的に増加する増分を均等に分配するために必要な数学は何ですか?

ありがとう!

4

3 に答える 3

2

UISlider の valueChange がこの関数を指すようにすると、機能します。指数値の形状を変更する場合は、M_E を浮動小数点数に置き換えます。最終的な指数値を表示します

-(IBAction)changeSliderExponentially:(id)sender{

UISlider * slider = (UISlider *)sender;
CGFloat inc = 10.0f;

int discreteValue = round(slider.value * inc);
CGFloat finalValue = discreteValue/inc;
[slider setValue:finalValue];

int min = 20.0f;
int max = 1000.0f;

double exponentialValue = (max - min)*(pow(M_E,finalValue) - pow(M_E,-finalValue))/(pow(M_E,1.0f) - pow(M_E,-1.0f)) + min;
NSLog(@"%f",exponentialValue);

}

于 2013-10-09T17:03:32.230 に答える
1

これは、Swift 4 用に更新された @hivert の回答と、OP の例の番号です。

let steps = 10
let min: Double = 25
let max: Double = 1000

for i in 0...steps-1 {
  let value = exp(log(min) + (Double(i) / Double(steps-1)) * (log(max) - log(min)))
  print("step: \(i + 1), value: \(round(value))")
}

出力:

step: 1, value: 25.0
step: 2, value: 38.0
step: 3, value: 57.0
step: 4, value: 85.0
step: 5, value: 129.0
step: 6, value: 194.0
step: 7, value: 292.0
step: 8, value: 441.0
step: 9, value: 664.0
step: 10, value: 1000.0
于 2018-08-02T15:24:37.493 に答える