Infinity Icosahedron Mapping

I made an mirrored infinity icosahedron for an electronic music festival last year made up of a combination of mirrored acrylic panels, 3d printed structure, and WS2812b LEDs. When I made it, I didn’t fully understand mapping so I did not wire it up with that in mind and the pixel data directions is not as one continuous string and from what I have read this could pose a problem for mapping.

I am working on another Infinity mirror Diamond Polyhedron and I plan on actually figuring out how to apply the mapping to it to so I want to ensure I wire it correctly. Is it best to wire the data path as one continuous string for the whole shape?

And are there any more resources for understanding mapping? I have been playing around in the mapper but I do not understand how to create a 3d shape. I understand generating a 2D shape based on an array but am falling short when it comes to 3D.

I have zero Javascript knowledge so all the other forum posts about coding and mapping are going way over my head. Is it possible to use a Json array for this shape or does a custom code need to be written?

Here is a screenshot of the new shape I am working on.

And my icosahedron

1 Like

Let me see if I can help. Mapping this is fairly simple.

The first thing I would do, is unfold your geometric shape out onto paper flat. Each one of those side you want to install an LED on is Row and Column. Your map would look something like this…

map = [
//LED Strip 1
and so on.

Here the X, Y is the position of the LED strip one of the sides. The controller basically say give me the coordinates to light up. The Z function here is the number of lights in your strip mapped out. Yes is there other ways to do the math? Yes! I don’t know how to do that math exactly that way.

Second, you can map out the coordinates exactly. It would be pretty time intensive because of keeping track of the constantly changing X, Y, Z values because you’re plotting diagonally.

Let’s just say to plot this that way, your X, Y matrix is 12 x 12, starting at 0.
I would have a starting number position at 4-6 to the point. So…
LED String 1 : [4,0,0], [3,1,1],[2,2,2]…
LED String 2 : [0,5,0], [1,6,1] , [2,7,2]…
LED String 3: [6,0,1], [7,1,1] , [8,2,2]…

Hopefully this helps.

1 Like

Thanks, @DaveB - that’s a great start.

@Galt - Just wanted to ask if you were able to find and understand this page:

Mapping in Pixelblaze

Since your projects are composed of straight lines, you should be able to adapt this helper code to produce each segment, as long as you can get a location of each vertex in 3D space (perhaps out of CAD).

A side benefit of this approach is that it will work well for your projects whether you were able to wire them up in one big line, or whether you had to include wires that create gaps between subsequent strips, or even if you used the output expander to get more channels for wiring in more of a “star” manner.

You can always do it by having your cad program export a list of points in 3D space (and make sure that’s formatted as a 2D or 3D JSON array), but I think it’s much easier to spend the time to poke around some of the reusable map generator code - then you’ll be ready for the next project. You’ll need to learn something on the order of 1% of all JavaScript to understand it, and there might be a few head scratcher moments, but it’s really worth it!