Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 02/07/2011 at 12:29, xxxxxxxx wrote:
As Py4D does not have a Random - class like COFFEE, here is one:
""" Reproduceral random generator, originally written by Niklas Rosenstein. Licensed under the WTFPL (c) - Do What The f**k You Want To Public License. This program is free software. It comes without any warranty, to the extent permitted by applicable law. You can redistribute it and/or modify it under the terms of the Do What The f**k You Want To Public License, Version 2, as published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more details. """ import c4d from c4d import Vector from c4d.utils.noise import C4DNoise class Random(object) : """ A reproduceral random generator based on c4d.utils.noise.C4DNoise, comparable to COFFEE's Random class. """ def __init__(self) : """ Construct the Random object. The seed defaults to 0, the noiseType to c4d.NOISE_DENTS. """ self.__seed = 0 # default seed self.__noise = C4DNoise(self.__seed) # reproduceral random generator self.__noiseType = c4d.NOISE_DENTS # default noise self.__num = 0 # number of calls def Init(self, seed, noiseType = None) : """ Initialize the object with a seed and a noisetype. noiseType defaults to c4d.NOISE_DENTS. """ if noiseType is None: noiseType = c4d.NOISE_DENTS self.__seed = seed self.__noiseType = noiseType self.__num = 0 return True def Reset(self) : """ Call this method to notify the end of the random-sequence. This enables reproducerality. """ self.__num = 0 return True def Get01(self) : """ Returns an, according to the specified noisetype distributed, pseudorandom value between 0 and 1. """ try: return self.__noise.Noise( self.__noiseType, True, # 2d mapping # ------------------------------------ Vector( # Cinema 4D R12.048 Py4D 's C4DNoise object self.__num, # does not care about it's seed argument (self.__seed % 16) ** 2, # given on initialisation, so, I'm using ((self.__seed / 4) ** 2) % 84232. # my own way to 'fake' a seed. ) # ------------------------------------ ) finally: self.__num += 1 def Get11(self) : """ Returns an, according to the specified noisetype distributed, pseudorandom value between -1 and 1. """ return self.Get01() * 2 - 1 def main() : r = Random() r.Init(0) for i in xrange(30) : if i == 0: print "First sequence: ", elif not i % 3: r.Reset() print "\nSecquence after Reset() : ", print round(r.Get01(), 3), "", print if __name__ == "__main__": main()
Should be self-explaining.
Cheers,
On 03/07/2011 at 16:30, xxxxxxxx wrote:
Very nice! Thanks for sharing!
On 04/07/2011 at 08:43, xxxxxxxx wrote:
Hy Nux,
thank you for sharing! Doesn't python come with a random class? Is there an advantage in using your version over the python default?
Thank you, maxx
On 04/07/2011 at 09:10, xxxxxxxx wrote:
Yes, the python's random module does not provide reproduceral random values. So, you can't reproduce the result of the execution before, because those are (well not really real) but real random values.
On 04/07/2011 at 14:36, xxxxxxxx wrote:
Hy there,
when I set a seed on the random, I also get reproducible pseudo-random values?
Like so:
>> random.seed(5) >>> random.random() 0.6229016948897019 >>> random.random() 0.7417869892607294 >>> random.seed(5) >>> random.random() 0.6229016948897019 >>> random.random() 0.7417869892607294
Cheers, maxx
On 04/07/2011 at 21:42, xxxxxxxx wrote:
Now this was new to me. O.o How could I miss the seed - function ? Nice, thanks !