HOME > ランダムに分散する
100あるものを微妙にちらして分割する関数が必要だったのですが、なかったので自作してみました(randiなのかな?)。例えば、100を4つにわけるときに、 25 の4つではなくて、23, 21,17,19 の様に微妙にずれた結果を配列で返す処理です。ソース汚い、、、、。本当は数学で正しい取得方法が あるのかと思いますが、よくわかりませんのでゴリゴリ作成。
参考:指定の平均値と分散をもつ正規分布からの乱数
参考:乱数配列の作成
参考:randi
以下関数を実行すると、適当に分散された数値の結果が帰ってきます。
let divArr:Array = self.devideRandom(300, split: 8, yurep: 5);
// ランダムに分散する関数
// target = ターゲットになる元の数字
// split = 分散する値
// yurep = ずらすパーセント 0~ 100 %
func devideRandom(target:Int, split:Int, yurep:Int)->Array{
var _total = target;
var _retArr:Array = Array();
let _yure = Int( _total / split) * yurep/100;
let _yuragi:Int = Int(_total / split / _yure);
let _lastIndex:Int = split-1;
for (var i=0;i < split; i++){
if (i == _lastIndex){
_retArr.append(_total);
break;
}
let _standard = _total/(split-i);
let _randInt:UInt32 = arc4random_uniform(UInt32(_yuragi));
let _onoff:UInt32 = arc4random_uniform(2);// + か マイナスか
var ret:Int = 0;
if (_onoff % 2 == 0){
ret = _standard + Int(_randInt);
}else{
ret = _standard - Int(_randInt);
}
_retArr.append(ret);
_total = _total - ret;
}
return _retArr;
}
print (divArr);
以下のような感じに出力されました。
8
20
67
75
35
14
22
59
↓ yure引数を100にした場合(ゆれていない)の配列で分散した場合
↓ yurep引数を5にした場合(ゆれてる)の配列で分散した場合
人様に見せることができない汚いソースでスイマセン、、、改善してまいります。
2021-05-14 14:21:41 | WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。
AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、
昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は... |
2021-05-06 14:04:37 | LINEのアニメーションスタンプ制作の落とし穴、、、失敗談
ゴールデンウィークにLINEスタンプを作成してみました。
作り切って申請も通したんですが、意図したアニメーションと違う、、、、
LINEクリエーターの画面だと、アニメーションのプレビュー... |
2021-05-01 18:05:35 | 久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。
忘れないようにメモ
エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。
ターゲット→ex... |
Tweet | |||
|