Peter Kagey in a Rhombic Dodecahedron made from Truncated Octahedra

Hello! I’m Peter!


Blog


  • Hinged stellated dodecahedron

    One of the earliest laser cutting projects I ever considered was when I was a graduate student: making a stellated dodecahedron. When I got to Harvey Mudd College and had the opportunity to use the laser cutter in the Makerspace for the first time, it was one of the first things I attempted.

    My initial method for securing the faces together didn’t work very well, so I ended up using the pieces and some Scotch tape to hold it together (with lots of tissue in the inside for some added structural integrity!)

    On my second iteration, I bought some small hinges in bulk for 8¢/ea, and used a hinged construction. (I believe these are the same hinges that Alex Kontorovich used in his excavated truncated cuboctahedron in Polyplane.)

    Here are some photos I made of the build process.

    In order to make two stellated dodecahedra from one laser cutting process, I nest the shapes like this. The outer face results in a see-through polyhedron like the piece of mine that was in the Mathematical Art Exhibition at the 2025 Joint Math Meetings.

    The inner face makes a solid stellated dodecahedron like the one shown in the construction pictures above.

    You can find the SVG code for this here, if you want to run it on your laser cutter:

    <?xml version="1.0" encoding="UTF-8"?>
    <svg width="200" height="300" version="1.1" style="fill:none; stroke:#00AA00;">
      <circle cx="122.17231" cy="113.39211" r="2.5"/>
      <circle cx="108.57557" cy="155.23862" r="2.5"/>
      <circle cx="86.340271" cy="155.23862" r="2.5"/>
      <circle cx="72.74353" cy="113.39211" r="2.5"/>
      <circle cx="75.5" cy="27.5" r="2.5"/>
      <circle cx="119.5" cy="27.5" r="2.5"/>
      <circle cx="154.5477228333333" cy="76.21576816666669" r="2.5"/>
      <circle cx="140.9509748333333" cy="118.06227616666669" r="2.5"/>
      <circle cx="54.049025166666674" cy="118.06227616666669" r="2.5"/>
      <circle cx="40.45227716666667" cy="76.21576816666669" r="2.5"/>
      <path stroke="#FF0000" d="M 10 10 L 185 10 L 97.5 279.297 Z"/>
      <circle cx="75.5" cy="57.5" r="2.5"/>
      <circle cx="119.5" cy="57.5" r="2.5"/>
      <path stroke="#FF0000" d="M 40,40 H 155 L 97.5,216.96662 Z"/>
    </svg>

    Here are some more pictures of the piece that was in the 2025 exhibition:

  • JMM Exhibition of Mathematical Art

    I was going through some old saved tweets during my move to Bluesky, and my favorite tweets to come across were those that mean something different to me know than they did when I saved them. In particular, this tweet from 2021 shows that 2021 JMM Exhibition of Mathematical Art catalog, and little did I know that just three years later, I’d be making art and finding my own pieces in the 2024 and 2025 versions.

    I recreated Dan Bach’s photo with the catalogs from the Exhibitions that I took part in.

    The 2024 Catalog
    The 2025 Catalog

    JMM 2024

    You can read about my piece in the 2024 exhibition on my post “Triangle Center Patterns“:

    Here’s the video, which really ought to be viewed in 4K!

    And you can read more about the piece on the Bridges website for the 2024 exhibition.

    JMM 2025

    My friend and former colleague Francis Su kindly posted about my 2025 piece when he saw it at JMM:

    I made some projections of this shape in Mathematica in order to plot on my AxiDrawV3 pen plotter.

    You can read more about this piece on the Bridges website for the 2025 exhibition.

  • Vowel cascades

    I saw a post on Bluesky that proposed a problem that I had been thinking about for a long time!

    I figured that with the help of dictionary and a Python script, I could find the desired examples.

    One vowel

    • A: t_lk
    • E: wh_n
    • I: w_th
    • O: fr_m
    • U: cl_b

    Two vowels

    • AE: sm_ll
    • AI: th_nks
    • AO: d_wn
    • AU: b_nk
    • EI: m_nd
    • EO: kn_w
    • EU: j_st
    • IO: sh_rt
    • IU: sk_lls
    • OU: sp_rt

    Three vowels

    • AEI: w_ll
    • AEO: l_ss
    • AEU: fl_sh
    • AIO: t_p
    • AIU: st_ff
    • AOU: c_ts
    • EIO: m_ld
    • EIU: d_sk
    • EOU: c_lts
    • IOU: p_lls

    Four vowels

    • AEIO: r_d
    • AEIU: b_ll
    • AEOU: l_gs
    • AIOU: m_st
    • EIOU: d_ll
    • AEIOU: b_t

    Python code

    Here’s my quick Python script to help find these. The dictionary has some words that I’m not familiar with (e.g. “cen,” “wir,” etc.) so I had to manually audit the results.

    from wordfreq import top_n_list
    import re
    from collections import defaultdict
    
    common_words = top_n_list('en', 50000)
    
    def vowels(word):
        return re.findall(r'[aeiouy]', word, re.IGNORECASE)
    
    def has_one_vowel(word):
        return len(vowels(word)) == 1 
    
    def first_vowel(word):
        return vowels(word)[0]
    
    def replace_vowels(word):
        return re.sub(r'[aeiouyAEIOUY]', '_', word)
    
    one_vowel_words = filter(has_one_vowel, common_words)
    dict = defaultdict(list)
    
    for w in one_vowel_words:
        dict[replace_vowels(w)] = sorted(dict[replace_vowels(w)] + [first_vowel(w)])
    
    vowel_subsets = [['a'], ['e'], ['i'], ['o'], ['u'], ['a', 'e'], ['a', 'i'], ['a', 'o'], ['a', 'u'], ['e', 'i'], ['e', 'o'], ['e', 'u'], ['i', 'o'], ['i', 'u'], ['o', 'u'], ['a', 'e', 'i'], ['a', 'e', 'o'], ['a', 'e', 'u'], ['a', 'i', 'o'], ['a', 'i', 'u'], ['a', 'o', 'u'], ['e', 'i', 'o'], ['e', 'i', 'u'], ['e', 'o', 'u'], ['i', 'o', 'u'], ['a', 'e', 'i', 'o'], ['a', 'e', 'i', 'u'], ['a', 'e', 'o', 'u'], ['a', 'i', 'o', 'u'], ['e', 'i', 'o', 'u'], ['a', 'e', 'i', 'o', 'u']]
    
    for vs in vowel_subsets:
        print("".join(vs).upper() + ":", ", ".join([k for k, v in dict.items() if v == vs][0:10]))