This post is still Work in Progress.

Using a non-baseIndex for meetpoint selection

Look at tier 9 in the following designby Fred W. Van Sant, Star Cuts III (1989). As you can see the cut meets the girdle, but only at the corners of the stone. The indices for tier 9 are: 00-04-08-12-16-20-24-28-32-36-40-44-48-52-56-60. However, the 00 index is not in the corner so we can’t use: cut("9", range(0, 4), 41, meet("3,8")) because meet() by default uses the baseIndex when looking for meeting points. The solution is to use a second parameter in our meet() function that overrides the baseIndex. We know that the corner is at index 8, so we can use: cut("9", range(0, 4), 41, meet("3,8", 8)).

Problematic Meetpoints

The following picture shows that our meetpoint notation method doesn’t always work. As can be seen, the yellow, blue and red dot are on differeent types of intersections. With meet("1,1,3") we cannot distinguish between them. We could try to add the second parameter to meet, the index from where to look for the meetpoint, but this can be cumbersome. Whenever Hackagem detects that a meetpoint has this issue, it will be shown with a ‘💣’ in the label. This means it might work in some cases, it could blow up in others.

What helps in this case is to select the edge between two facets: turn on the indices to see which ones we need:

For instance, to get the yellow and blue point we can:

let pts = findEdge("3:1", "1:92")   // findEdge returns an array with two points

show(pts[0], Color.Yellow)
show(pts[1], Color.Aqua)

Another method is to add the indices to the meet function like so:

show(meet("3:1, 1:4, 1:8"), Color.Red)

Designing a Checkerboard

WIP: Projection & cutting through 3 points, yeah!