-1

球の周りに一連のランダムなフロート (0.0f - 1.0f) がある場合 (または 2D グリッドでも機能する場合)、それぞれが隣接するものと約 0.1f だけ異なる場合、これらを変換する方法はありますか?それぞれのRGB値は、色を取得する可能性が(本質的に)等しい方法で、隣接する色と約0.1fだけ異なります(したがって、一部の色は他の色よりも偏っていません)?

私が使用している方法はthisです。各頂点の最終オフセットが完了した後、すべてのオフセットを 0.0 から 1.0 の float 値にスケールダウンします。これらの float 値は値の初期分布を反映しています。役立つ場合はコード スニペットを投稿できますが、興味がある場合は編集中です。

これが潜在的な答えです、Hot Licksに感謝します! ただし、もう少し均等な分布を与えるものはいいかもしれません. それでも、それは始まりです(それ自体はちょっとクールです)、はい、ありがとうございます!

Random randomGen = new Random();

int randomOne = randomGen.nextInt(256);
int randomTwo = randomGen.nextInt(256);
int randomThree = randomGen.nextInt(256);

float offsets[] = new float[vertices.length];

... // Calcuate the offsets via the method described in that article (code is in the edits if you're curious)

for(int i = 0; i < vertices.length; i++)
{
    float randomFloat = offsets[i];

    float r = (float)((int)(offsets[i]*255.0) ^ randomOne)/255.0f;
    float b = (float)((int)(offsets[i]*255.0) ^ randomTwo)/255.0f;
    float g = (float)((int)(offsets[i]*255.0) ^ randomThree)/255.0f;
}

編集:余分なものの多くを削除し、質問の要点に到達しました。コード スニペットやその他の関連情報に興味がある場合は、編集内容を確認できますが、これは私が求めているのは実際には大部分です。

edit edit: (部分的な) ソリューション コード スニペットを追加しました。

4

3 に答える 3

0

その単一の float 値を n 個の float 値に変換し、それぞれが (本質的に) 互いに無関係であり、この同じ分布を反映する方法はありますか?

いいえ。要件が矛盾しています。

単一の float 値を取得し、そこから決定論的な方法で N 個の他の float を生成すると、それらは定義によって関連付けられます。また、非常に予測可能です...最初の値が与えられます。

考えられる唯一のことは、より安価な乱数ジェネレーターを見つけることです。(たとえば、SecureRandom ジェネレーターを使用するのは間違いです...それが現在行っていることである場合)。


ここでのランダム性に関する重要な点は、乱数の生成は問題ではないということです (私は非常に高速な乱数ジェネレーターを使用しています)。乱数は球体上の滑らかな分布のように生成されるため、高速化は実際には問題ではありません。オプションは配信品質を落とさずに考えています。私のランダムな方法は非常に最適化されていますが、本質的に遅いだけです。

まあ、答えは同じだと思います...「球の周りの分布」の問題をスピードアップする方法を見つけられない限り。(明らかに、回転対称性を利用できます...しかし、同様に明らかに、明らかに非ランダムな結果が得られます。)

于 2013-01-27T04:05:24.887 に答える
0

ええと、あなたが欲しいのは nextGaussian() だと思います。

もう 1 つのオプションは、カテゴリ プレイブックからページを取り出して、色をスペクトル上のスポットを表すものとして表示し、次に単一のランダムをフェッチして、対応する色を 1 回の操作で見つけることです。したがって、引数のために、最初の値が R:256 G:0 B:0 から R:0 G:0 B:256 までの RGB 値から 100 色を作成するとします。100 だった場合、ランダムな # を取得し、それが .56 だとすると、配列の 56 番目の # を取得します。

于 2013-01-27T04:23:12.030 に答える
-1

分布に関して何が必要かはわかりませんが、連続する乱数の分数ビットパターンを一緒にXORするか、10個の固定乱数パターンで乱数をXORするようなものを検討します。

しかし、これは、一様分布を扱っている場合にのみ機能すると思います。

于 2013-01-27T04:14:08.073 に答える