Generating some shapes

Now I haven’t gotten around to explaining the whole point of this blog yet but meanwhile I’m actually doing “experiments” with the code I’ve got and so I’ll jump out of sequence and report an experiment I just did.

Let’s just say I’ve developed a program, an “interpreter” (so it’s easier to experiment than updated C# code itself) that has a little “language”. I just type in a “program” which will depend of some “parameters” which I can specify separately. Then I have some UI controls to determine how the program is run. The result is figures drawn on my UI, but also a “montage” that is created that I can save somewhere (previously just in my OneNote log, now in this blog as well).

So without explaining all the details, here’s the function I’m looking at, one of the most basic (in polar form):

 r = sin(A×θ)

and to convert to X,Y (Cartesian) coordinates (which I need to actually draw the plot)

x = r×cos(θ)  y=r×sin(θ)

Your basic math lesson for the day. If this is too tough for you the math part of these (only high school level) may be tough for you.

So you get:

image4A

Note: The blue stuff is the polar coordinates grid.

And to get the orientation of this figure I wanted I pulled a little sneaky on you

r = sin(A×θ + Φ)

where Φ is known as “phase” and in this case I used 90º for Φ which really converts the sine into a cosine (remember your high school trig, eh?)

So I implement this with my code like this:

A 0.6666667
u sin(T A 90)
c cos(T)
s sin(T)
x multiply(r c)
y multiply(r s)

Note: I hate wasting time writing parsers so I don’t do expressions in my language and instead use functions, plus all “constants” are just a single upper case letter and “variables” are a single lower case variables (saves having build symbol tables). I’m just lazy on this part and parsers aren’t interesting to me.

So now we get to the part where my program can get something to look at fairly quickly. In addition to just setting A to some value (which then draws difference figures) I built a simple “iterator” for A, wie so:

@ A 0.25 0.5 3

So this repeats the drawing of the programming but with values of A {1/2 3/4 1-1/2 …} so I can see variations of the basic parametric equation. This process creates a “montage” of thumbnails of the figure (or a “film strip” with just one parameter being iterated) so now we see some results:

image4B

Note: WordPress makes my graphics kinda ugly, I’ll have to figure out how to tune my resolution to get them to look better, but you get the idea.

This is just iterating A from 1 to 9 creating “flowers”, a really basic shape. So let’s look at some variations:

image4C

This is really the same as above but using cosine instead of sine to generate the values of r, resulting in a rotation of the figure (can you deduce how much the rotation is in each figure?)

Now things get a little more interesting when I use fractional values of A instead of just integers, but then to draw the figure takes more “cycles” (the number of 360º periods), so here’s A starting at 0.5 and incrementing by 0.5:

image4D

or A starting at 1/3 and incrementing by 1/3

image4E

or A starting at 1/4 and incrementing by 1/4

image4F

Getting a little tedious, eh? But I can crank these “filmstrips” out really easily just by changing some text inputs in my UI rather than having to go back and modify C# and recompile and rerun, and that’s the point, easy to try lots of combinations looking for some that may be interesting.

Now if we get bored with these, my “language” also allows me to quickly change the “program” so what about instead of:

r = sin(A×θ)

I use:

r = sin(A×θ) ^ ½

(^ ½ is standard notation for taking square root of function – I can easily use any power, even square root, which is a bit tricky as sine functions generate negative numbers and I don’t want to mess with complex numbers (those containing i or √-1)) and I get:

image4G

And if that is getting a little boring how about using some different type of wave function:

Here’s an ordinary sine wave (2 periods):

image4H

But let’s try this one instead:

image4I

otherwise known as a triangle wave for obvious reasons and it produces:

image4J

The “flowers” instead of being curved at their tips get kinda “pointy” and we can easily vary this a bit, but just taking cube root of triangle which looks like this:

image4K

and produces:

image4L

but there’s another thing we can do with triangle waves and that is change their “duty cycle” and make them asymmetrical, like this:

image4M

and the cube root of that triangle produces “flowers” that look like this:

image4N

and I can keep playing with these parameters and see what I get, maybe interesting, maybe not.

But let’s look at one more variation. Instead of a simple wave I can use a “composite” of several sine’s with different frequencies and phases, like this:

image4O

and a composite wave (not the one above, a bit different) can produce

image4P

And on and on, easy to generate these things, again some interesting, some not, but so what? This basic shapes can then be modified (scaled, rotated) and place on some path, like 12 of them around the outside of a circle, and there is part of a mandala.

So here’s one of these variations I like and might use as a shape in a mandala:

image4Q

Or perhaps this one:

image4R

So end of math lesson and a look ahead at the applications I’m writing with more to come about how I put this all together and how I got started on all this.

Advertisements

About dmill96

old fat (but now getting trim and fit) guy, who used to create software in Silicon Valley (almost before it was called that), who used to go backpacking and bicycling and cross-country skiing and now geodashes, drives AWD in Wyoming, takes pictures, and writes long blog posts and does xizquvjyk.
This entry was posted in experiment, samples and tagged , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s