これは私のコードです:
secretPointX = (arc4random() % 600) + 400;
secretPointY = (arc4random() % 350) + 250;
これらを座標として使用し、ピタゴラスの定理を使用して円の半径に使用します。私の問題は、400〜600から250〜350の範囲の乱数が生成されないことです。指定された範囲外の数値を生成します。なにが問題ですか?
これは私のコードです:
secretPointX = (arc4random() % 600) + 400;
secretPointY = (arc4random() % 350) + 250;
これらを座標として使用し、ピタゴラスの定理を使用して円の半径に使用します。私の問題は、400〜600から250〜350の範囲の乱数が生成されないことです。指定された範囲外の数値を生成します。なにが問題ですか?
モジュロ除算により、演算の残りが得られます。簡単に言えば、このように使用すると、0 から右側のオペランドより 1 少ない数値が得られます。599 までの数字を取得し、それを 400 に追加します。
あなたはこれをしているはずです:
u_int32_t max = 600;
u_int32_t min = 400;
u_int32_t result = (arc4random % (max - min) + 1) + min;
または、より良い、
arc4random_uniform(max - min + 1) + min;
ゼロ(含む)から600(除く)までの乱数を生成し、それに400を追加します。その結果、当然、400から999の間の数値になります。代わりに次のようなものを使用してください。
secretPointX = (arc4random() % 201) + 400;
arc4random_uniform(201)
モジュロ演算を実行せずに、0から200までの乱数を取得するために使用することもできます。