QCAD
Open Source 2D CAD
Loading...
Searching...
No Matches
opennurbs_rand.h
Go to the documentation of this file.
1/* $NoKeywords: $ */
2/*
3//
4// Copyright (c) 1993-2007 Robert McNeel & Associates. All rights reserved.
5// Rhinoceros is a registered trademark of Robert McNeel & Assoicates.
6//
7// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
8// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
9// MERCHANTABILITY ARE HEREBY DISCLAIMED.
10//
11// For complete openNURBS copyright information see <http://www.opennurbs.org>.
12//
14*/
15
16#if !defined(OPENNURBS_RANDOM_NUMBER_INC_)
17#define OPENNURBS_RANDOM_NUMBER_INC_
18
20
22{
23 ON__UINT32 mti; /* mti = 0xFFFFFFFF means mt[] is not initialized */
24 ON__UINT32 mt[624]; /* the array for the state vector */
25};
26
27
28/*
29Description:
30 Seed a context for on_random_number().
31Parameters:
32 s - [in]
33 rand_context - [out] context to seed.
34
35Remarks:
36 on_random_number_seed() does not use any static memory.
37Example:
38 ON_RAND_CONTEXT rand_context;
39
40 ON__UINT seed = 123;
41 on_random_number_seed( seed, &rand_context );
42
43 ON__UINT32 r1 = on_random_number( &rand_context );
44 ON__UINT32 r2 = on_random_number( &rand_context );
45 ON__UINT32 r3 = on_random_number( &rand_context );
46*/
49 struct ON_RANDOM_NUMBER_CONTEXT* rand_context
50 );
51
52/*
53Description:
54 Get a random number.
55Parameters:
56 rand_context - [in/out]
57 random number context. The first time rand_context is
58 used it must be either initialized by calling on_random_number_seed()
59 or rand_context->mti must be set to 0xFFFFFFFF. Otherwise do not
60 modify randcontext between calls to on_random_number.
61Returns:
62 A random number.
63Remarks:
64 on_random_number() does not use any static memory.
65Example:
66 ON_RAND_CONTEXT rand_context;
67
68 ON__UINT seed = 123;
69 on_random_number_seed( seed, &rand_context );
70
71 ON__UINT32 r1 = on_random_number( &rand_context );
72 ON__UINT32 r2 = on_random_number( &rand_context );
73 ON__UINT32 r3 = on_random_number( &rand_context );
74*/
76 struct ON_RANDOM_NUMBER_CONTEXT* rand_context
77 );
78
79
80/*
81Description:
82 Seed the random number generator used by on_rand().
83Parameters:
84 s - [in]
85Remarks:
86 on_srand() is not thread safe. It used static global memory
87 that is modified by on_srand() and on_rand().
88*/
90
91/*
92Description:
93 Get a random number.
94Returns:
95 A random number.
96Remarks:
97 on_rand() is not thread safe. It used static global memory
98 that is modified by on_srand() and on_rand().
99*/
100ON__UINT32 on_rand(void);
101
102
104
105
106#if defined(ON_CPLUSPLUS)
107
108class ON_CLASS ON_RandomNumberGenerator
109{
110public:
111 ON_RandomNumberGenerator();
112
113 /*
114 Description:
115 Seed the random number generator.
116 Parameters:
117 s - [in]
118 */
119 void Seed( ON__UINT32 s );
120
121 /*
122 Returns:
123 32 bit unsigned random number [0,0xFFFFFFFF] [0,4294967295]
124 */
125 ON__UINT32 RandomNumber();
126
127 /*
128 Returns:
129 double in the interval [0.0 and 1.0]
130 */
131 double RandomDouble();
132
133 /*
134 Returns:
135 double in the interval [t0,t1]
136 */
137 double RandomDouble(double t0, double t1);
138
139private:
140 struct ON_RANDOM_NUMBER_CONTEXT m_rand_context;
141};
142
143#endif
144
145
146#endif
#define ON_BEGIN_EXTERNC
Definition opennurbs_defines.h:40
#define ON_CLASS
Definition opennurbs_defines.h:91
#define ON_END_EXTERNC
Definition opennurbs_defines.h:41
void on_random_number_seed(ON__UINT32 s, struct ON_RANDOM_NUMBER_CONTEXT *rand_context)
Definition opennurbs_rand.cpp:83
ON__UINT32 on_random_number(struct ON_RANDOM_NUMBER_CONTEXT *rand_context)
Definition opennurbs_rand.cpp:148
void on_srand(ON__UINT32 s)
Definition opennurbs_rand.cpp:197
ON__UINT32 on_rand(void)
Definition opennurbs_rand.cpp:207
char s
Definition opennurbs_string.cpp:32
unsigned int ON__UINT32
Definition opennurbs_system.h:326
Definition opennurbs_rand.h:22
ON__UINT32 mt[624]
Definition opennurbs_rand.h:24
ON__UINT32 mti
Definition opennurbs_rand.h:23