Create your very own set of customizable demonic horns!
This script generates twisty, curly, horns. You can make ram, dinosaur, Maleficent, and gnarly, twisted, fantasy horns.
You can leave them polygon-y, or run them through Meshmixer (see my sample files) to smooth them out.
Poke some holes, and you've got a musical instrument.
Use them for costumes, models, etc.
Source image from https://imagecomics.com/comics/releases/spawn-260
The script uses a recursive algorithm, but only because I was playing with recursion in OpenSCAD for my Customizable Parametric Trees project. (http://www.thingiverse.com/thing:1595362) Technically the whole thing could be written using regular parametric equations and you could get the same result. Each horn follows a path that can be described in terms of sines and cosines and whatnot.
The big question for me was whether a recursive algorithm would eat up more processing power. I've found that it does not (at least not much) and that the real thing that matters is how many primitives you are joining and how many facets they have. This is why I limited it to 64 segments (I found through trial and error that this was the number of segments my computer could handle before the rendering time went to the moon) and why the segments are so rough around the edges.
That being said, I did come across an article (it was somewhere on either this page http://kitwallace.tumblr.com/post/74713917178/openscad-revisited or one of the pages it links to) where someone found a way to make things like this render faster. You would think that linking a bunch of cylinders together end to end to make a knot, or in this case a horn, would be fairly straightforward, but there is a big catch. If you make the cylinders so that they exactly touch each other at the ends, for some reason it creates a situation that is very slow for OpenSCAD to render. But, if you make it so that the end of each cylinder pokes a little bit into the end of the next one, it will render much, much faster.
I tried to keep some of the script settings fixed so that it can render in Customizer without crashing Thingiverse, but I encourage you to download the script and crank up the settings on your local machine. You can make some really cool stuff.