|
|
After playing with greeble placement on a sphere, I realized that there were no
macros in rand.inc for generating random points on the surface of things like
cubes, tori, cylinders and cones, etc.
I've written a few, and am picking away at the remaining ideas on my list, but
would like to assemble a reasonably complete collection before publishing for
overall critical review and testing. (contributions welcome)
As always, most everything is a rough draft that is a proof of concept, and
everything including the name is up for revision.
Some are just basic task macros that are used in the actual random distribution
macros.
What I have so far is:
MakePerpendicularVector (v0) - basically just the alternate version of
VPerp_To_Vector (v0) with a different name to differentiate it.
Rand_Integer (Min, Max, RandSeed)
// Returns an integer from Min to Max, inclusive [Min ... Max]
Array_Of_Integers (Min, Max)
// Creates an array of integers from Min to Max inclusive [Min ... Max]
Rand_Element_In_Array (Array, Dim, RandSeed)
// Returns a random element of a dimension of an array
VRand_In_Rectangle (V_Plane, S_Width, S_Height, S_RandSeed)
// Returns a random point in a rectangle lying in the specified plane
VRand_ON_Box (RandSeed)
// Returns a random point on an origin-centered unit box
VRand_ON_Circle (RandSeed)
// Returns a random point on an origin-centered unit circle (radius = 1)
VRand_ON_Cone (Height, radA, radB, RandSeed)
// Returns a random point on a cone (or cylinder)
VRand_In_Cone (Height, radA, radB, RandSeed)
// Returns a random point IN a cone (or cylinder)
VRand_ON_Parametric (UVstart, UVend, fnX, fnY, fnZ, RandSeed)
// Returns a random point on a parametric surface
This will probably be general purpose, with calls to it for generating
points on a torus, etc
I'm using the #if (input_file_name = "RandomDistributions.inc") trick to set up
a test scene (no #camera - only using the default), and every macro will have a
companion test macro to demonstrate that it works, and provide a working syntax
and code/usage example.
So VRand_ON_Parametric (UVstart, UVend, fnX, fnY, fnZ, RandSeed) will have a
VRand_ON_Parametric_TEST () macro to go along with it.
Remaining ideas slated for development are:
VRand_ON_SOR ()
VRand_ON_Lathe ()
VRand_ON_Prism ()
VRand_In_Polygon () Not sure "vrand in object" will work - will inside() tests
work with planar objects?
VRand_ON_BicubicPatch ()
VRand_ON_Isosurface ()
Folks are welcome to beat me to the punch, or write their own versions to
compare approaches, efficiency, flexibility, speed, etc.
Other areas of future interest:
Prism <x,z> syntax infuriates me, and so I'd like to write a tidy macro to use
<x,y,z> coordinates, probably from an array, and maybe another macro to take the
<x,z> part of a prism and create an array of proper <x, y, z> coordinates.
Is it somehow possible (in SDL) to divine how many arguments an extant function
requires? That would be useful. We have dimension_size for arrays...
clipka noted the shortcomings of HSV, and I was wondering if some of the people
who play with color spaces and interpolation might come up with something along
the lines of: https://www.alanzucconi.com/2017/07/15/improving-the-rainbow-2/
Post a reply to this message
|
|