Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Reproduceral Random Values

    PYTHON Development
    0
    6
    739
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Helper
      last edited by

      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,

      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 03/07/2011 at 16:30, xxxxxxxx wrote:

        Very nice! Thanks for sharing!

        1 Reply Last reply Reply Quote 0
        • H
          Helper
          last edited by

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          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

          1 Reply Last reply Reply Quote 0
          • H
            Helper
            last edited by

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            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.

            1 Reply Last reply Reply Quote 0
            • H
              Helper
              last edited by

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              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

              1 Reply Last reply Reply Quote 0
              • H
                Helper
                last edited by

                THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                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 !

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post