« 愛☆ちゅカーブレングス。 | トップページ | Making of 花火。 c05。 ICE / RenderTree。 »

2011年11月10日 (木)

整数乱数の激怒。

また ICEドリル的な・・・・ いや、ドリルじゃないなこれは。 ICE罵倒か。




まあともかくですね、Randomize な Integer ですよ。

Randomize Value by Range を使って、整数(Integer)な乱数を発生させた時のキョドり方について書きます。

実はだいぶ前に気づいてはいたんですが、今回改めて実験してみますた。







Randomize Value by Range は、デフォルトでは Scalar値 を吐き出しますよね。 Scalar は小数点も含む数値です。 でも、整数が欲しい時もあるわけですよね。 例えば ParticleID とかは整数です。1.572個目のパーティクル 」などというものはありません。必ず整数です。 このように、整数を扱うことは普通によくあるわけでして、それを Randomize するとどうなるかという話です。

ひとまず、実験のためにダミーのタスクを設定します。 「ポリゴングリッドの、各頂点のYポジションを、整数でランダムする」 ということにします。 つまりグリッドを構成する頂点が上下方向にランダムに引っ張られるわけですが、ポジションが 1.2365 などではなく、1 の次は 2 しか無いという、つまりその中間にある小数点の値は出て来ない、ということです。


ってことで、Randomize Value by Range を取り出し、アウトプットのデータの型を整数にするため Integer to Scalar ノードを取り出し接続します。 これで Randomize Value by Range のアウトプットは整数型になりました。 1.2535 みたいな値は出てきません。 0 の次は 1 だし、その次は 2 です。





あとは図のようにツリーを組んでYポジションがランダム化されるようにしました。

Int1

むむむっ 

ちょっと見て下さいよ。 もともと 0 の高さにある頂点に対し、ランダム値 0 から 1 までを足せと言っているのに、実際には -1 から 1 までの値が出現してしまっています。


-1 ってなんですか?

0 に対して 0 を足したら 0 だし、1を足したら 1 じゃないですか。

なんで -1 が出てくるんですか。

おかしいですよね? 

Seed をいじくっても、どうしても -1 が混じってしまいます。


これ、最初気づくまで、けっこう時間かかったんだよなあ。意味分かりません。最小は 0 だと言っているのに、勝手に -1 を出すんじゃねえドルァ








他の数値も試してみます。 今度は 1 から 1 までにしました。それ以外 ICETree は全く同じです。

Int2

だーかーらー (メ゚皿゚) 

1 から 1 なら、 出てくる値は 1 しかねえだろうがー なんで -1 とか 0 が出現するんだよー 間違えるなよ ICE ちゃんー






今度は、 0 ~ 2 を試してみました。

Int3

あっ ( ゚∀゚)

出てきた値は 0, 1, 2 の3種類! 合ってる! 

ここは、Seed を引っ掻き回しても、必ず 0, 1, 2 の3種類しか出てきません。 うん、それでいいんだよ。 いい子だ。








ならば。 今度は 0 ~ 3 を試してみました。

Int4

ICE は今すぐ市んだ方がいいです
市ね市ねすぐ市ねこのICE野郎






結局ねえ、原因不明なんですよ。 なぜこうなるかもわからないし、このツリーのまま解決する方法は見つかってません。 0 ~ 2 の時だけ正しい値が出るのも、原因不明です。

これ不具合ですよね? 嘔吐デスクさま?




しかたないので、Randomize Value by Range を整数型で使わず、Scalar のまま Round に食わせて、四捨五入してやることにしました。

Int5

はい、これがやりたかったんです。




一応他の数値も確認しました。上記でおかしかった、1 ~ 1 の場合。

Int6

うん、いい子だ。それで良い。



0 ~ 3 の場合。

Int7

よしよしいい子だ。






結局ですね、原因も、根本的な解決方法も、わかりません。単に Round すれば結果が同じだからいいや、Round 使っても不具合が無いように見えるのでいいや、という所で止まっています。

おかしいですよね? 嘔吐デスクさま?

ひとまず仕事が進まないからこれでやりますけど、ちゃんと直すか、最低でも説明はして下さいよ嘔吐デスクさま。

Int8_2

|

« 愛☆ちゅカーブレングス。 | トップページ | Making of 花火。 c05。 ICE / RenderTree。 »

コメント

ホントだ
ただ、minもmax偶数の時正しい値がでませんか?
マイナスの値が来てもそうですな~catface

投稿: yot | 2011年11月14日 (月) 17時50分

あっ ほんとだ 両方偶数の時のみ、正しい値が出るように見えますね。


識者の見解では、「中身を見てみたが、こりゃ整数は想定してねえぞ」 ということらしいです。あくまでも小数点以下の数値があることが前提みたいな。 Round する方法で全く問題なかろうとも。

その理由の説明もしてもらったんですが、現時点では俺、よくわかってません。 orz
ともかく整数は想定外で、Round するのが最善であろうと。





識者 = m4gさん、いつもお世話になっております。いやマジで。

投稿: junki | 2011年11月15日 (火) 13時18分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/217974/53213523

この記事へのトラックバック一覧です: 整数乱数の激怒。:

« 愛☆ちゅカーブレングス。 | トップページ | Making of 花火。 c05。 ICE / RenderTree。 »